Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(466)

Side by Side Diff: content/renderer/gpu/compositor_external_begin_frame_source.cc

Issue 619843002: cc: Make separate interface for BeginFrame ipc from OutputSurface (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 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 "content/renderer/gpu/compositor_external_begin_frame_source.h"
6
7 #include "content/common/view_messages.h"
8 #include "content/renderer/render_thread_impl.h"
9 #include "ipc/ipc_forwarding_message_filter.h"
10 #include "ipc/ipc_sync_channel.h"
11 #include "ipc/ipc_sync_message_filter.h"
12
13 namespace content {
14
15 // static
16 IPC::ForwardingMessageFilter* CompositorExternalBeginFrameSource::CreateFilter(
17 base::TaskRunner* target_task_runner) {
18 uint32 messages_to_filter[] = {
19 ViewMsg_BeginFrame::ID
20 };
21
22 return new IPC::ForwardingMessageFilter(
23 messages_to_filter, arraysize(messages_to_filter),
24 target_task_runner);
25 }
26
27 CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSource(
28 int routing_id)
29 : begin_frame_source_filter_(
30 RenderThreadImpl::current()->begin_frame_source_filter()),
31 message_sender_(RenderThreadImpl::current()->sync_message_filter()),
32 is_client_ready_(false),
33 routing_id_(routing_id) {
34 DCHECK(begin_frame_source_filter_.get());
35 DCHECK(message_sender_.get());
36 DetachFromThread();
37 }
38
39 CompositorExternalBeginFrameSource::~CompositorExternalBeginFrameSource() {
40 DCHECK(CalledOnValidThread());
41 if (begin_frame_source_proxy_.get())
42 begin_frame_source_proxy_->ClearBeginFrameSource();
43 begin_frame_source_filter_->RemoveRoute(routing_id_);
44 }
45
46 void CompositorExternalBeginFrameSource::OnNeedsBeginFramesChange(
47 bool needs_begin_frames) {
48 DCHECK(CalledOnValidThread());
49 Send(new ViewHostMsg_SetNeedsBeginFrame(routing_id_, needs_begin_frames));
danakj 2014/10/10 16:03:35 What's sending us here on shutdown now? Do we need
simonhong 2014/10/15 01:04:21 I made cc::Scheduler call SentNeedsBeginFrames(fal
50 }
51
52 void CompositorExternalBeginFrameSource::SetClientReady() {
53 DCHECK(CalledOnValidThread());
54 is_client_ready_ = true;
55 begin_frame_source_proxy_ =
56 new CompositorExternalBeginFrameSourceProxy(this);
57 begin_frame_source_filter_->AddRoute(
58 routing_id_,
59 base::Bind(&CompositorExternalBeginFrameSourceProxy::OnMessageReceived,
60 begin_frame_source_proxy_));
61 }
62
63 void CompositorExternalBeginFrameSource::OnMessageReceived(
64 const IPC::Message& message) {
65 DCHECK(CalledOnValidThread());
66 DCHECK(is_client_ready_);
67 IPC_BEGIN_MESSAGE_MAP(CompositorExternalBeginFrameSource, message)
68 IPC_MESSAGE_HANDLER(ViewMsg_BeginFrame, OnBeginFrame);
69 IPC_END_MESSAGE_MAP();
70 }
71
72 void CompositorExternalBeginFrameSource::OnBeginFrame(
73 const cc::BeginFrameArgs& args) {
74 DCHECK(CalledOnValidThread());
75 CallOnBeginFrame(args);
76 }
77
78 bool CompositorExternalBeginFrameSource::Send(IPC::Message* message) {
79 return message_sender_->Send(message);
80 }
81
82 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698