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

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

Issue 2061273002: cc: Make BackToBackBeginFrameSource a SyntheticBeginFrameSource. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: syntheticbeginframesource: delete-DEBUG_FRAMES Created 4 years, 6 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
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/gpu/compositor_external_begin_frame_source.h" 5 #include "content/renderer/gpu/compositor_external_begin_frame_source.h"
6 6
7 #include "content/common/view_messages.h" 7 #include "content/common/view_messages.h"
8 #include "ipc/ipc_sync_channel.h" 8 #include "ipc/ipc_sync_channel.h"
9 #include "ipc/ipc_sync_message_filter.h" 9 #include "ipc/ipc_sync_message_filter.h"
10 10
(...skipping 14 matching lines...) Expand all
25 CompositorExternalBeginFrameSource::~CompositorExternalBeginFrameSource() { 25 CompositorExternalBeginFrameSource::~CompositorExternalBeginFrameSource() {
26 DCHECK(CalledOnValidThread()); 26 DCHECK(CalledOnValidThread());
27 if (begin_frame_source_proxy_.get()) { 27 if (begin_frame_source_proxy_.get()) {
28 begin_frame_source_proxy_->ClearBeginFrameSource(); 28 begin_frame_source_proxy_->ClearBeginFrameSource();
29 begin_frame_source_filter_->RemoveHandlerOnCompositorThread( 29 begin_frame_source_filter_->RemoveHandlerOnCompositorThread(
30 routing_id_, 30 routing_id_,
31 begin_frame_source_filter_handler_); 31 begin_frame_source_filter_handler_);
32 } 32 }
33 } 33 }
34 34
35 void CompositorExternalBeginFrameSource::OnNeedsBeginFramesChanged(
36 bool needs_begin_frames) {
37 DCHECK(CalledOnValidThread());
38 if (!needs_begin_frames)
39 missed_begin_frame_args_ = cc::BeginFrameArgs();
40 Send(new ViewHostMsg_SetNeedsBeginFrames(routing_id_, needs_begin_frames));
41 }
42
43 void CompositorExternalBeginFrameSource::AddObserver( 35 void CompositorExternalBeginFrameSource::AddObserver(
44 cc::BeginFrameObserver* obs) { 36 cc::BeginFrameObserver* obs) {
45 DCHECK(CalledOnValidThread()); 37 DCHECK(CalledOnValidThread());
38 DCHECK(obs);
39 DCHECK(observers_.find(obs) == observers_.end());
40
46 SetClientReady(); 41 SetClientReady();
47 BeginFrameSourceBase::AddObserver(obs); 42 bool observers_was_empty = observers_.empty();
43 observers_.insert(obs);
44 obs->OnBeginFrameSourcePausedChanged(paused_);
45 if (observers_was_empty)
46 Send(new ViewHostMsg_SetNeedsBeginFrames(routing_id_, true));
47
48 // Send a MISSED begin frame if necessary. 48 // Send a MISSED begin frame if necessary.
49 if (missed_begin_frame_args_.IsValid()) { 49 if (missed_begin_frame_args_.IsValid()) {
50 cc::BeginFrameArgs last_args = obs->LastUsedBeginFrameArgs(); 50 cc::BeginFrameArgs last_args = obs->LastUsedBeginFrameArgs();
51 if (!last_args.IsValid() || 51 if (!last_args.IsValid() ||
52 (missed_begin_frame_args_.frame_time > last_args.frame_time)) { 52 (missed_begin_frame_args_.frame_time > last_args.frame_time)) {
53 obs->OnBeginFrame(missed_begin_frame_args_); 53 obs->OnBeginFrame(missed_begin_frame_args_);
54 } 54 }
55 } 55 }
56 } 56 }
57 57
58 void CompositorExternalBeginFrameSource::RemoveObserver(
59 cc::BeginFrameObserver* obs) {
60 DCHECK(obs);
61 DCHECK(observers_.find(obs) != observers_.end());
62
63 observers_.erase(obs);
64 if (observers_.empty()) {
65 missed_begin_frame_args_ = cc::BeginFrameArgs();
66 Send(new ViewHostMsg_SetNeedsBeginFrames(routing_id_, false));
67 }
68 }
69
58 void CompositorExternalBeginFrameSource::SetClientReady() { 70 void CompositorExternalBeginFrameSource::SetClientReady() {
59 DCHECK(CalledOnValidThread()); 71 DCHECK(CalledOnValidThread());
60 if (begin_frame_source_proxy_) 72 if (begin_frame_source_proxy_)
61 return; 73 return;
62 begin_frame_source_proxy_ = 74 begin_frame_source_proxy_ =
63 new CompositorExternalBeginFrameSourceProxy(this); 75 new CompositorExternalBeginFrameSourceProxy(this);
64 begin_frame_source_filter_handler_ = base::Bind( 76 begin_frame_source_filter_handler_ = base::Bind(
65 &CompositorExternalBeginFrameSourceProxy::OnMessageReceived, 77 &CompositorExternalBeginFrameSourceProxy::OnMessageReceived,
66 begin_frame_source_proxy_); 78 begin_frame_source_proxy_);
67 begin_frame_source_filter_->AddHandlerOnCompositorThread( 79 begin_frame_source_filter_->AddHandlerOnCompositorThread(
68 routing_id_, 80 routing_id_,
69 begin_frame_source_filter_handler_); 81 begin_frame_source_filter_handler_);
70 } 82 }
71 83
72 void CompositorExternalBeginFrameSource::OnMessageReceived( 84 void CompositorExternalBeginFrameSource::OnMessageReceived(
73 const IPC::Message& message) { 85 const IPC::Message& message) {
74 DCHECK(CalledOnValidThread()); 86 DCHECK(CalledOnValidThread());
75 DCHECK(begin_frame_source_proxy_.get()); 87 DCHECK(begin_frame_source_proxy_.get());
76 IPC_BEGIN_MESSAGE_MAP(CompositorExternalBeginFrameSource, message) 88 IPC_BEGIN_MESSAGE_MAP(CompositorExternalBeginFrameSource, message)
77 IPC_MESSAGE_HANDLER(ViewMsg_SetBeginFramePaused, SetBeginFrameSourcePaused) 89 IPC_MESSAGE_HANDLER(ViewMsg_SetBeginFramePaused,
90 OnSetBeginFrameSourcePaused)
78 IPC_MESSAGE_HANDLER(ViewMsg_BeginFrame, OnBeginFrame) 91 IPC_MESSAGE_HANDLER(ViewMsg_BeginFrame, OnBeginFrame)
79 IPC_END_MESSAGE_MAP() 92 IPC_END_MESSAGE_MAP()
80 } 93 }
81 94
95 void CompositorExternalBeginFrameSource::OnSetBeginFrameSourcePaused(
96 bool paused) {
97 if (paused_ == paused)
98 return;
99 paused_ = paused;
100 std::unordered_set<cc::BeginFrameObserver*> observers(observers_);
101 for (auto* obs : observers)
102 obs->OnBeginFrameSourcePausedChanged(paused_);
103 }
104
82 void CompositorExternalBeginFrameSource::OnBeginFrame( 105 void CompositorExternalBeginFrameSource::OnBeginFrame(
83 const cc::BeginFrameArgs& args) { 106 const cc::BeginFrameArgs& args) {
84 DCHECK(CalledOnValidThread()); 107 DCHECK(CalledOnValidThread());
85 missed_begin_frame_args_ = args; 108 missed_begin_frame_args_ = args;
86 missed_begin_frame_args_.type = cc::BeginFrameArgs::MISSED; 109 missed_begin_frame_args_.type = cc::BeginFrameArgs::MISSED;
87 CallOnBeginFrame(args); 110 std::unordered_set<cc::BeginFrameObserver*> observers(observers_);
111 for (auto* obs : observers)
112 obs->OnBeginFrame(args);
88 } 113 }
89 114
90 bool CompositorExternalBeginFrameSource::Send(IPC::Message* message) { 115 bool CompositorExternalBeginFrameSource::Send(IPC::Message* message) {
91 return message_sender_->Send(message); 116 return message_sender_->Send(message);
92 } 117 }
93 118
94 } // namespace content 119 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/gpu/compositor_external_begin_frame_source.h ('k') | content/test/fake_compositor_dependencies.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698