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

Unified 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 side-by-side diff with in-line comments
Download patch
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 a8b76cf2e87366d30dde269a15e5a982054592ba..e2d13608ac781ece2ba7576d23a3ef8cade0cfb6 100644
--- a/content/renderer/gpu/compositor_external_begin_frame_source.cc
+++ b/content/renderer/gpu/compositor_external_begin_frame_source.cc
@@ -32,19 +32,19 @@ CompositorExternalBeginFrameSource::~CompositorExternalBeginFrameSource() {
}
}
-void CompositorExternalBeginFrameSource::OnNeedsBeginFramesChanged(
- bool needs_begin_frames) {
- DCHECK(CalledOnValidThread());
- if (!needs_begin_frames)
- missed_begin_frame_args_ = cc::BeginFrameArgs();
- Send(new ViewHostMsg_SetNeedsBeginFrames(routing_id_, needs_begin_frames));
-}
-
void CompositorExternalBeginFrameSource::AddObserver(
cc::BeginFrameObserver* obs) {
DCHECK(CalledOnValidThread());
+ DCHECK(obs);
+ DCHECK(observers_.find(obs) == observers_.end());
+
SetClientReady();
- BeginFrameSourceBase::AddObserver(obs);
+ 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();
@@ -55,6 +55,18 @@ void CompositorExternalBeginFrameSource::AddObserver(
}
}
+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));
+ }
+}
+
void CompositorExternalBeginFrameSource::SetClientReady() {
DCHECK(CalledOnValidThread());
if (begin_frame_source_proxy_)
@@ -74,17 +86,30 @@ void CompositorExternalBeginFrameSource::OnMessageReceived(
DCHECK(CalledOnValidThread());
DCHECK(begin_frame_source_proxy_.get());
IPC_BEGIN_MESSAGE_MAP(CompositorExternalBeginFrameSource, message)
- IPC_MESSAGE_HANDLER(ViewMsg_SetBeginFramePaused, SetBeginFrameSourcePaused)
+ IPC_MESSAGE_HANDLER(ViewMsg_SetBeginFramePaused,
+ OnSetBeginFrameSourcePaused)
IPC_MESSAGE_HANDLER(ViewMsg_BeginFrame, OnBeginFrame)
IPC_END_MESSAGE_MAP()
}
+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_);
+}
+
void CompositorExternalBeginFrameSource::OnBeginFrame(
const cc::BeginFrameArgs& args) {
DCHECK(CalledOnValidThread());
missed_begin_frame_args_ = args;
missed_begin_frame_args_.type = cc::BeginFrameArgs::MISSED;
- CallOnBeginFrame(args);
+ std::unordered_set<cc::BeginFrameObserver*> observers(observers_);
+ for (auto* obs : observers)
+ obs->OnBeginFrame(args);
}
bool CompositorExternalBeginFrameSource::Send(IPC::Message* message) {
« 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