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

Unified Diff: content/browser/renderer_host/render_widget_host_view_aura.cc

Issue 423773002: Unified BeginFrame scheduling (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Working on aura with --enable-begin-frame-scheduling Created 6 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
Index: content/browser/renderer_host/render_widget_host_view_aura.cc
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
index eee2df69b76756f82a597511cb8b934f22227e9e..bc8577a892257d706cee59b280022c90bddf0a5d 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -61,7 +61,6 @@
#include "ui/base/hit_test.h"
#include "ui/base/ime/input_method.h"
#include "ui/base/ui_base_types.h"
-#include "ui/compositor/compositor_vsync_manager.h"
#include "ui/compositor/dip_util.h"
#include "ui/events/event.h"
#include "ui/events/event_utils.h"
@@ -452,6 +451,7 @@ RenderWidgetHostViewAura::RenderWidgetHostViewAura(RenderWidgetHost* host)
#endif
has_snapped_to_boundary_(false),
touch_editing_client_(NULL),
+ needs_begin_frame_(false),
weak_ptr_factory_(this) {
host_->SetView(this);
window_observer_.reset(new WindowObserver(this));
@@ -470,6 +470,15 @@ RenderWidgetHostViewAura::RenderWidgetHostViewAura(RenderWidgetHost* host)
////////////////////////////////////////////////////////////////////////////////
// RenderWidgetHostViewAura, RenderWidgetHostView implementation:
+bool RenderWidgetHostViewAura::OnMessageReceived(const IPC::Message& msg) {
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(RenderWidgetHostViewAura, msg)
+ IPC_MESSAGE_HANDLER(ViewHostMsg_SetNeedsBeginFrame, OnSetNeedsBeginFrame)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
+ return handled;
+}
+
void RenderWidgetHostViewAura::InitAsChild(
gfx::NativeView parent_view) {
window_->SetType(ui::wm::WINDOW_TYPE_CONTROL);
@@ -570,6 +579,8 @@ void RenderWidgetHostViewAura::WasShown() {
}
delegated_frame_host_->WasShown();
+ GetCompositor()->begin_frame_manager()->AddObserver(this);
+ RequestBeginFrame();
#if defined(OS_WIN)
if (legacy_render_widget_host_HWND_) {
@@ -592,6 +603,8 @@ void RenderWidgetHostViewAura::WasHidden() {
return;
host_->WasHidden();
delegated_frame_host_->WasHidden();
+ if (GetCompositor())
+ GetCompositor()->begin_frame_manager()->RemoveObserver(this);
#if defined(OS_WIN)
constrained_rects_.clear();
@@ -2119,6 +2132,37 @@ void RenderWidgetHostViewAura::OnHostMoved(const aura::WindowTreeHost* host,
}
////////////////////////////////////////////////////////////////////////////////
+// ui::BeginFrameManager::Observer implementation:
+void RenderWidgetHostViewAura::OnSendBeginFrame(
+ const cc::BeginFrameArgs& args) {
+ TRACE_EVENT0("cc", "RenderWidgetHostViewAura::OnSendBeginFrame");
+ if (!host_)
+ return;
+
+ // Flush input here?
+
+ cc::BeginFrameArgs adjusted_args(args);
+
+ delegated_frame_host_->UpdateVSyncParameters(adjusted_args);
+
+ // TODO(brianderson): Use adaptive draw-time estimation.
+ base::TimeDelta estimated_browser_composite_time =
+ base::TimeDelta::FromMicroseconds(
+ (1.0f * base::Time::kMicrosecondsPerSecond) / (3.0f * 60));
+
+ adjusted_args.deadline -= estimated_browser_composite_time;
+
+ host_->Send(new ViewMsg_BeginFrame(host_->GetRoutingID(), adjusted_args));
+
+ if (needs_begin_frame_) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(&RenderWidgetHostViewAura::RequestBeginFrame,
+ weak_ptr_factory_.GetWeakPtr()));
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
// RenderWidgetHostViewAura, private:
RenderWidgetHostViewAura::~RenderWidgetHostViewAura() {
@@ -2281,6 +2325,11 @@ void RenderWidgetHostViewAura::SnapToPhysicalPixelBoundary() {
has_snapped_to_boundary_ = true;
}
+void RenderWidgetHostViewAura::RequestBeginFrame() const {
+ DCHECK(GetCompositor());
+ GetCompositor()->begin_frame_manager()->RequestBeginFrame();
+}
+
void RenderWidgetHostViewAura::InternalSetBounds(const gfx::Rect& rect) {
if (HasDisplayPropertyChanged(window_))
host_->InvalidateScreenInfo();
@@ -2439,6 +2488,18 @@ SkColorType RenderWidgetHostViewAura::PreferredReadbackFormat() {
return kN32_SkColorType;
}
+void RenderWidgetHostViewAura::OnSetNeedsBeginFrame(bool enabled) {
+ if (needs_begin_frame_ == enabled)
+ return;
brianderson 2014/08/21 00:14:00 I think it would be better for the RWHV to add or
simonhong 2014/08/26 08:24:48 It's much much better than now! Thanks :)
+
+ TRACE_EVENT1("cc", "RenderWidgetHostViewAura::OnSetNeedsBeginFrame",
+ "enabled", enabled);
+ if(GetCompositor() && enabled)
+ RequestBeginFrame();
+
+ needs_begin_frame_ = enabled;
+}
+
////////////////////////////////////////////////////////////////////////////////
// DelegatedFrameHost, public:

Powered by Google App Engine
This is Rietveld 408576698