| 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) {
|
|
|