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 |
index e2d13608ac781ece2ba7576d23a3ef8cade0cfb6..0538f47bdb989da90b4d67de9dfaedb65816a859 100644 |
--- a/content/renderer/gpu/compositor_external_begin_frame_source.cc |
+++ b/content/renderer/gpu/compositor_external_begin_frame_source.cc |
@@ -14,17 +14,18 @@ CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSource( |
CompositorForwardingMessageFilter* filter, |
IPC::SyncMessageFilter* sync_message_filter, |
int routing_id) |
- : begin_frame_source_filter_(filter), |
+ : external_begin_frame_source_(this), |
+ begin_frame_source_filter_(filter), |
message_sender_(sync_message_filter), |
routing_id_(routing_id) { |
- DCHECK(begin_frame_source_filter_.get()); |
- DCHECK(message_sender_.get()); |
+ DCHECK(begin_frame_source_filter_); |
+ DCHECK(message_sender_); |
DetachFromThread(); |
} |
CompositorExternalBeginFrameSource::~CompositorExternalBeginFrameSource() { |
DCHECK(CalledOnValidThread()); |
- if (begin_frame_source_proxy_.get()) { |
+ if (begin_frame_source_proxy_) { |
begin_frame_source_proxy_->ClearBeginFrameSource(); |
begin_frame_source_filter_->RemoveHandlerOnCompositorThread( |
routing_id_, |
@@ -35,56 +36,34 @@ CompositorExternalBeginFrameSource::~CompositorExternalBeginFrameSource() { |
void CompositorExternalBeginFrameSource::AddObserver( |
cc::BeginFrameObserver* obs) { |
DCHECK(CalledOnValidThread()); |
- DCHECK(obs); |
- DCHECK(observers_.find(obs) == observers_.end()); |
- SetClientReady(); |
- bool observers_was_empty = observers_.empty(); |
- observers_.insert(obs); |
- obs->OnBeginFrameSourcePausedChanged(paused_); |
- if (observers_was_empty) |
- Send(new ViewHostMsg_SetNeedsBeginFrames(routing_id_, true)); |
- |
- // Send a MISSED begin frame if necessary. |
- if (missed_begin_frame_args_.IsValid()) { |
- cc::BeginFrameArgs last_args = obs->LastUsedBeginFrameArgs(); |
- if (!last_args.IsValid() || |
- (missed_begin_frame_args_.frame_time > last_args.frame_time)) { |
- obs->OnBeginFrame(missed_begin_frame_args_); |
- } |
+ if (!begin_frame_source_proxy_) { |
+ begin_frame_source_proxy_ = |
+ new CompositorExternalBeginFrameSourceProxy(this); |
+ begin_frame_source_filter_handler_ = |
+ base::Bind(&CompositorExternalBeginFrameSourceProxy::OnMessageReceived, |
+ begin_frame_source_proxy_); |
+ begin_frame_source_filter_->AddHandlerOnCompositorThread( |
+ routing_id_, begin_frame_source_filter_handler_); |
} |
+ |
+ external_begin_frame_source_.AddObserver(obs); |
} |
void CompositorExternalBeginFrameSource::RemoveObserver( |
cc::BeginFrameObserver* obs) { |
- DCHECK(obs); |
- DCHECK(observers_.find(obs) != observers_.end()); |
- |
- observers_.erase(obs); |
- if (observers_.empty()) { |
- missed_begin_frame_args_ = cc::BeginFrameArgs(); |
- Send(new ViewHostMsg_SetNeedsBeginFrames(routing_id_, false)); |
- } |
+ external_begin_frame_source_.RemoveObserver(obs); |
} |
-void CompositorExternalBeginFrameSource::SetClientReady() { |
- DCHECK(CalledOnValidThread()); |
- if (begin_frame_source_proxy_) |
- return; |
- begin_frame_source_proxy_ = |
- new CompositorExternalBeginFrameSourceProxy(this); |
- begin_frame_source_filter_handler_ = base::Bind( |
- &CompositorExternalBeginFrameSourceProxy::OnMessageReceived, |
- begin_frame_source_proxy_); |
- begin_frame_source_filter_->AddHandlerOnCompositorThread( |
- routing_id_, |
- begin_frame_source_filter_handler_); |
+void CompositorExternalBeginFrameSource::OnNeedsBeginFrames( |
+ bool needs_begin_frames) { |
+ Send(new ViewHostMsg_SetNeedsBeginFrames(routing_id_, needs_begin_frames)); |
} |
void CompositorExternalBeginFrameSource::OnMessageReceived( |
const IPC::Message& message) { |
DCHECK(CalledOnValidThread()); |
- DCHECK(begin_frame_source_proxy_.get()); |
+ DCHECK(begin_frame_source_proxy_); |
IPC_BEGIN_MESSAGE_MAP(CompositorExternalBeginFrameSource, message) |
IPC_MESSAGE_HANDLER(ViewMsg_SetBeginFramePaused, |
OnSetBeginFrameSourcePaused) |
@@ -94,22 +73,12 @@ void CompositorExternalBeginFrameSource::OnMessageReceived( |
void CompositorExternalBeginFrameSource::OnSetBeginFrameSourcePaused( |
bool paused) { |
- if (paused_ == paused) |
- return; |
- paused_ = paused; |
- std::unordered_set<cc::BeginFrameObserver*> observers(observers_); |
- for (auto* obs : observers) |
- obs->OnBeginFrameSourcePausedChanged(paused_); |
+ external_begin_frame_source_.OnSetBeginFrameSourcePaused(paused); |
} |
void CompositorExternalBeginFrameSource::OnBeginFrame( |
- const cc::BeginFrameArgs& args) { |
- DCHECK(CalledOnValidThread()); |
- missed_begin_frame_args_ = args; |
- missed_begin_frame_args_.type = cc::BeginFrameArgs::MISSED; |
- std::unordered_set<cc::BeginFrameObserver*> observers(observers_); |
- for (auto* obs : observers) |
- obs->OnBeginFrame(args); |
+ const cc::BeginFrameArgs& args) { |
+ external_begin_frame_source_.OnBeginFrame(args); |
} |
bool CompositorExternalBeginFrameSource::Send(IPC::Message* message) { |