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

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_aura.cc

Issue 138903025: Read compositor VSync information from platform, when possible (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 50467938 rebase. Created 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/browser/renderer_host/render_widget_host_view_aura.h" 5 #include "content/browser/renderer_host/render_widget_host_view_aura.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/basictypes.h" 8 #include "base/basictypes.h"
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback_helpers.h" 10 #include "base/callback_helpers.h"
(...skipping 3186 matching lines...) Expand 10 before | Expand all | Expand 10 after
3197 void RenderWidgetHostViewAura::OnCompositingLockStateChanged( 3197 void RenderWidgetHostViewAura::OnCompositingLockStateChanged(
3198 ui::Compositor* compositor) { 3198 ui::Compositor* compositor) {
3199 // A compositor lock that is part of a resize lock timed out. We 3199 // A compositor lock that is part of a resize lock timed out. We
3200 // should display a renderer frame. 3200 // should display a renderer frame.
3201 if (!compositor->IsLocked() && can_lock_compositor_ == YES_DID_LOCK) { 3201 if (!compositor->IsLocked() && can_lock_compositor_ == YES_DID_LOCK) {
3202 can_lock_compositor_ = NO_PENDING_RENDERER_FRAME; 3202 can_lock_compositor_ = NO_PENDING_RENDERER_FRAME;
3203 } 3203 }
3204 } 3204 }
3205 3205
3206 void RenderWidgetHostViewAura::OnUpdateVSyncParameters( 3206 void RenderWidgetHostViewAura::OnUpdateVSyncParameters(
3207 ui::Compositor* compositor,
3208 base::TimeTicks timebase, 3207 base::TimeTicks timebase,
3209 base::TimeDelta interval) { 3208 base::TimeDelta interval) {
3210 if (IsShowing()) { 3209 if (IsShowing()) {
3211 if (IsDeadlineSchedulingEnabled()) { 3210 if (IsDeadlineSchedulingEnabled()) {
3212 // The deadline scheduler has logic to stagger the draws of the 3211 // The deadline scheduler has logic to stagger the draws of the
3213 // Renderer and Browser built-in, so send it an accurate timebase. 3212 // Renderer and Browser built-in, so send it an accurate timebase.
3214 host_->UpdateVSyncParameters(timebase, interval); 3213 host_->UpdateVSyncParameters(timebase, interval);
3215 } else if (!last_draw_ended_.is_null()) { 3214 } else if (!last_draw_ended_.is_null()) {
3216 // For the non-deadline scheduler, we send the Renderer an offset 3215 // For the non-deadline scheduler, we send the Renderer an offset
3217 // vsync timebase to avoid its draws racing the Browser's draws. 3216 // vsync timebase to avoid its draws racing the Browser's draws.
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
3492 cursor_client->AddObserver(this); 3491 cursor_client->AddObserver(this);
3493 NotifyRendererOfCursorVisibilityState(cursor_client->IsCursorVisible()); 3492 NotifyRendererOfCursorVisibilityState(cursor_client->IsCursorVisible());
3494 } 3493 }
3495 if (current_surface_.get()) 3494 if (current_surface_.get())
3496 UpdateExternalTexture(); 3495 UpdateExternalTexture();
3497 if (HasFocus()) { 3496 if (HasFocus()) {
3498 ui::InputMethod* input_method = GetInputMethod(); 3497 ui::InputMethod* input_method = GetInputMethod();
3499 if (input_method) 3498 if (input_method)
3500 input_method->SetFocusedTextInputClient(this); 3499 input_method->SetFocusedTextInputClient(this);
3501 } 3500 }
3501
3502 ui::Compositor* compositor = GetCompositor();
3503 if (compositor)
3504 compositor->vsync_manager()->AddObserver(this);
3502 } 3505 }
3503 3506
3504 void RenderWidgetHostViewAura::RemovingFromRootWindow() { 3507 void RenderWidgetHostViewAura::RemovingFromRootWindow() {
3505 aura::client::CursorClient* cursor_client = 3508 aura::client::CursorClient* cursor_client =
3506 aura::client::GetCursorClient(window_->GetRootWindow()); 3509 aura::client::GetCursorClient(window_->GetRootWindow());
3507 if (cursor_client) 3510 if (cursor_client)
3508 cursor_client->RemoveObserver(this); 3511 cursor_client->RemoveObserver(this);
3509 3512
3510 DetachFromInputMethod(); 3513 DetachFromInputMethod();
3511 3514
3512 window_->GetDispatcher()->RemoveRootWindowObserver(this); 3515 window_->GetDispatcher()->RemoveRootWindowObserver(this);
3513 host_->ParentChanged(0); 3516 host_->ParentChanged(0);
3514 ui::Compositor* compositor = GetCompositor(); 3517 ui::Compositor* compositor = GetCompositor();
3515 if (current_surface_.get()) { 3518 if (current_surface_.get()) {
3516 // We can't get notification for commits after this point, which would 3519 // We can't get notification for commits after this point, which would
3517 // guarantee that the compositor isn't using an old texture any more, so 3520 // guarantee that the compositor isn't using an old texture any more, so
3518 // instead we force the layer to stop using any external resources which 3521 // instead we force the layer to stop using any external resources which
3519 // synchronizes with the compositor thread, and makes it safe to run the 3522 // synchronizes with the compositor thread, and makes it safe to run the
3520 // callback. 3523 // callback.
3521 window_->layer()->SetShowPaintedContent(); 3524 window_->layer()->SetShowPaintedContent();
3522 } 3525 }
3523 RunOnCommitCallbacks(); 3526 RunOnCommitCallbacks();
3524 resize_lock_.reset(); 3527 resize_lock_.reset();
3525 host_->WasResized(); 3528 host_->WasResized();
3526 if (compositor && compositor->HasObserver(this)) 3529 if (compositor) {
3527 compositor->RemoveObserver(this); 3530 if (compositor->HasObserver(this))
3531 compositor->RemoveObserver(this);
3532 compositor->vsync_manager()->RemoveObserver(this);
3533 }
3528 } 3534 }
3529 3535
3530 ui::Compositor* RenderWidgetHostViewAura::GetCompositor() const { 3536 ui::Compositor* RenderWidgetHostViewAura::GetCompositor() const {
3531 aura::WindowEventDispatcher* dispatcher = window_->GetDispatcher(); 3537 aura::WindowEventDispatcher* dispatcher = window_->GetDispatcher();
3532 return dispatcher ? dispatcher->host()->compositor() : NULL; 3538 return dispatcher ? dispatcher->host()->compositor() : NULL;
3533 } 3539 }
3534 3540
3535 void RenderWidgetHostViewAura::DetachFromInputMethod() { 3541 void RenderWidgetHostViewAura::DetachFromInputMethod() {
3536 ui::InputMethod* input_method = GetInputMethod(); 3542 ui::InputMethod* input_method = GetInputMethod();
3537 if (input_method && input_method->GetTextInputClient() == this) 3543 if (input_method && input_method->GetTextInputClient() == this)
(...skipping 18 matching lines...) Expand all
3556 RenderWidgetHost* widget) { 3562 RenderWidgetHost* widget) {
3557 return new RenderWidgetHostViewAura(widget); 3563 return new RenderWidgetHostViewAura(widget);
3558 } 3564 }
3559 3565
3560 // static 3566 // static
3561 void RenderWidgetHostViewPort::GetDefaultScreenInfo(WebScreenInfo* results) { 3567 void RenderWidgetHostViewPort::GetDefaultScreenInfo(WebScreenInfo* results) {
3562 GetScreenInfoForWindow(results, NULL); 3568 GetScreenInfoForWindow(results, NULL);
3563 } 3569 }
3564 3570
3565 } // namespace content 3571 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698