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

Unified Diff: ui/compositor/compositor.cc

Issue 775143003: cc: Implement unified BeginFrame on aura (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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: ui/compositor/compositor.cc
diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc
index 287eaf19751ffc5e0d4f4fe09826482f812fef7c..e9af84d0994fee8e1f4bbe6272fd1ebf06265d7b 100644
--- a/ui/compositor/compositor.cc
+++ b/ui/compositor/compositor.cc
@@ -26,7 +26,6 @@
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/compositor/compositor_observer.h"
#include "ui/compositor/compositor_switches.h"
-#include "ui/compositor/compositor_vsync_manager.h"
#include "ui/compositor/dip_util.h"
#include "ui/compositor/layer.h"
#include "ui/compositor/layer_animator_collection.h"
@@ -72,7 +71,6 @@ Compositor::Compositor(gfx::AcceleratedWidget widget,
widget_(widget),
surface_id_allocator_(context_factory->CreateSurfaceIdAllocator()),
task_runner_(task_runner),
- vsync_manager_(new CompositorVSyncManager()),
device_scale_factor_(0.0f),
last_started_frame_(0),
last_ended_frame_(0),
@@ -95,6 +93,9 @@ Compositor::Compositor(gfx::AcceleratedWidget widget,
settings.main_frame_before_activation_enabled = false;
settings.throttle_frame_production =
!command_line->HasSwitch(switches::kDisableGpuVsync);
+#if defined(USE_AURA)
+ settings.forward_begin_frames_to_children = true;
brianderson 2015/03/02 22:38:16 This flag doesn't seem useful like we thought it w
simonhong 2015/03/03 22:54:12 Yep, setting state_machine.SetChildrenNeedBeginFra
+#endif
#if !defined(OS_MACOSX)
settings.renderer_settings.partial_swap_enabled =
!command_line->HasSwitch(cc::switches::kUIDisablePartialSwap);
@@ -153,6 +154,8 @@ Compositor::~Compositor() {
FOR_EACH_OBSERVER(CompositorObserver, observer_list_,
OnCompositingShuttingDown(this));
+ DCHECK(!begin_frame_observer_list_.might_have_observers());
+
if (root_layer_)
root_layer_->SetCompositor(NULL);
@@ -249,8 +252,9 @@ bool Compositor::IsVisible() {
return host_->visible();
}
-scoped_refptr<CompositorVSyncManager> Compositor::vsync_manager() const {
- return vsync_manager_;
+void Compositor::SetAuthoritativeVSyncInterval(
+ const base::TimeDelta& interval) {
+ host_->SetAuthoritativeVSyncInterval(interval);
}
void Compositor::AddObserver(CompositorObserver* observer) {
@@ -280,6 +284,31 @@ bool Compositor::HasAnimationObserver(
return animation_observer_list_.HasObserver(observer);
}
+void Compositor::AddBeginFrameObserver(
brianderson 2015/03/02 22:38:17 Please add unit tests for this since the last_begi
+ CompositorBeginFrameObserver* observer,
+ const cc::BeginFrameArgs& last_begin_frame_args_sent_to_observer) {
+ // If |last_begin_frame_args_| is still effective, send it to the new
+ // |observer| immediately.
+ if (!last_begin_frame_args_sent_to_observer.deadline.is_null() &&
brianderson 2015/03/02 22:38:16 Is this check for a null deadline necessary?
simonhong 2015/03/03 22:54:12 I also can't remember why I added this a while ago
+ last_begin_frame_args_sent_to_observer != missed_begin_frame_args_) {
brianderson 2015/03/02 22:38:16 It is possible that last_begin_frame_args_sent_to_
simonhong 2015/03/03 22:54:12 Done.
+ missed_begin_frame_args_.type = cc::BeginFrameArgs::MISSED;
brianderson 2015/03/02 22:38:17 Can you move this line to the end of Compositor::S
simonhong 2015/03/03 22:54:12 Done.
+ observer->OnSendBeginFrame(missed_begin_frame_args_);
+ }
+
+ if (!begin_frame_observer_list_.might_have_observers())
+ SetChildrenNeedBeginFrames(true);
+ begin_frame_observer_list_.AddObserver(observer);
+}
+
+void Compositor::RemoveBeginFrameObserver(
+ CompositorBeginFrameObserver* observer) {
+ DCHECK(begin_frame_observer_list_.HasObserver(observer));
+ begin_frame_observer_list_.RemoveObserver(observer);
+
+ if (!begin_frame_observer_list_.might_have_observers())
+ SetChildrenNeedBeginFrames(false);
+}
+
void Compositor::BeginMainFrame(const cc::BeginFrameArgs& args) {
FOR_EACH_OBSERVER(CompositorAnimationObserver,
animation_observer_list_,
@@ -340,6 +369,13 @@ void Compositor::DidAbortSwapBuffers() {
OnCompositingAborted(this));
}
+void Compositor::SendBeginFramesToChildren(const cc::BeginFrameArgs& args) {
+ FOR_EACH_OBSERVER(CompositorBeginFrameObserver,
+ begin_frame_observer_list_,
+ OnSendBeginFrame(args));
+ missed_begin_frame_args_ = args;
+}
+
const cc::LayerTreeDebugState& Compositor::GetLayerTreeDebugState() const {
return host_->debug_state();
}
@@ -378,4 +414,8 @@ void Compositor::CancelCompositorLock() {
compositor_lock_->CancelLock();
}
+void Compositor::SetChildrenNeedBeginFrames(bool need_begin_frames) {
+ host_->SetChildrenNeedBeginFrames(need_begin_frames);
+}
+
} // namespace ui

Powered by Google App Engine
This is Rietveld 408576698