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

Unified Diff: content/renderer/gpu/compositor_external_begin_frame_source.cc

Issue 2281143002: Refactor external begin frame source into a base class (Closed)
Patch Set: danakj review Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/gpu/compositor_external_begin_frame_source.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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) {
« no previous file with comments | « content/renderer/gpu/compositor_external_begin_frame_source.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698