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

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

Issue 2527283003: cc: Introduce BeginFrame sequence numbers and acknowledgements.
Patch Set: Address Sami's comments, DisplayScheduler observes while BFSObservers exist. Created 4 years 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
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 <set> 7 #include <set>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 bool is_guest_view_hack) 363 bool is_guest_view_hack)
364 : host_(RenderWidgetHostImpl::From(host)), 364 : host_(RenderWidgetHostImpl::From(host)),
365 window_(nullptr), 365 window_(nullptr),
366 in_shutdown_(false), 366 in_shutdown_(false),
367 in_bounds_changed_(false), 367 in_bounds_changed_(false),
368 popup_parent_host_view_(nullptr), 368 popup_parent_host_view_(nullptr),
369 popup_child_host_view_(nullptr), 369 popup_child_host_view_(nullptr),
370 is_loading_(false), 370 is_loading_(false),
371 has_composition_text_(false), 371 has_composition_text_(false),
372 begin_frame_source_(nullptr), 372 begin_frame_source_(nullptr),
373 oldest_incorporated_frame_(0),
373 needs_begin_frames_(false), 374 needs_begin_frames_(false),
374 needs_flush_input_(false), 375 needs_flush_input_(false),
375 added_frame_observer_(false), 376 added_frame_observer_(false),
376 cursor_visibility_state_in_renderer_(UNKNOWN), 377 cursor_visibility_state_in_renderer_(UNKNOWN),
377 #if defined(OS_WIN) 378 #if defined(OS_WIN)
378 legacy_render_widget_host_HWND_(nullptr), 379 legacy_render_widget_host_HWND_(nullptr),
379 legacy_window_destroyed_(false), 380 legacy_window_destroyed_(false),
380 virtual_keyboard_requested_(false), 381 virtual_keyboard_requested_(false),
381 #endif 382 #endif
382 has_snapped_to_boundary_(false), 383 has_snapped_to_boundary_(false),
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 if (needs_frame == added_frame_observer_) 670 if (needs_frame == added_frame_observer_)
670 return; 671 return;
671 672
672 added_frame_observer_ = needs_frame; 673 added_frame_observer_ = needs_frame;
673 if (needs_frame) 674 if (needs_frame)
674 begin_frame_source_->AddObserver(this); 675 begin_frame_source_->AddObserver(this);
675 else 676 else
676 begin_frame_source_->RemoveObserver(this); 677 begin_frame_source_->RemoveObserver(this);
677 } 678 }
678 679
679 void RenderWidgetHostViewAura::OnBeginFrame( 680 void RenderWidgetHostViewAura::OnBeginFrame(const cc::BeginFrameArgs& args) {
680 const cc::BeginFrameArgs& args) { 681 if (args.source_id != last_begin_frame_args_.source_id) {
682 // Consider us up to date up to the previous BeginFrame.
683 oldest_incorporated_frame_ =
684 args.sequence_number > 0 ? args.sequence_number - 1 : 0;
685 }
686
681 needs_flush_input_ = false; 687 needs_flush_input_ = false;
682 host_->FlushInput(); 688 host_->FlushInput();
683 UpdateNeedsBeginFramesInternal(); 689 UpdateNeedsBeginFramesInternal();
684 host_->Send(new ViewMsg_BeginFrame(host_->GetRoutingID(), args)); 690 host_->Send(new ViewMsg_BeginFrame(host_->GetRoutingID(), args));
685 last_begin_frame_args_ = args; 691 last_begin_frame_args_ = args;
686 } 692 }
687 693
688 const cc::BeginFrameArgs& RenderWidgetHostViewAura::LastUsedBeginFrameArgs() 694 const cc::BeginFrameArgs& RenderWidgetHostViewAura::LastUsedBeginFrameArgs()
689 const { 695 const {
690 return last_begin_frame_args_; 696 return last_begin_frame_args_;
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
928 934
929 start_edge_top.Scale(viewportToDIPScale); 935 start_edge_top.Scale(viewportToDIPScale);
930 start_edge_bottom.Scale(viewportToDIPScale); 936 start_edge_bottom.Scale(viewportToDIPScale);
931 end_edge_top.Scale(viewportToDIPScale); 937 end_edge_top.Scale(viewportToDIPScale);
932 end_edge_bottom.Scale(viewportToDIPScale); 938 end_edge_bottom.Scale(viewportToDIPScale);
933 939
934 selection.start.SetEdge(start_edge_top, start_edge_bottom); 940 selection.start.SetEdge(start_edge_top, start_edge_bottom);
935 selection.end.SetEdge(end_edge_top, end_edge_bottom); 941 selection.end.SetEdge(end_edge_top, end_edge_bottom);
936 } 942 }
937 943
944 uint64_t begin_frame_source_id = frame.metadata.begin_frame_source_id;
945 uint64_t begin_frame_number = frame.metadata.begin_frame_number;
946 uint64_t oldest_incorporated_frame = frame.metadata.oldest_incorporated_frame;
947
938 delegated_frame_host_->SwapDelegatedFrame(compositor_frame_sink_id, 948 delegated_frame_host_->SwapDelegatedFrame(compositor_frame_sink_id,
939 std::move(frame)); 949 std::move(frame));
940 SelectionUpdated(selection.is_editable, selection.is_empty_text_form_control, 950 SelectionUpdated(selection.is_editable, selection.is_empty_text_form_control,
941 selection.start, selection.end); 951 selection.start, selection.end);
952
953 // The CompositorFrame's updates were only incorporated if it wasn't skipped.
954 bool has_updates = false;
955 if (!delegated_frame_host_->skipped_frames()) {
956 oldest_incorporated_frame_ = oldest_incorporated_frame;
957 has_updates = true;
958 }
959
960 cc::BeginFrameAck ack(begin_frame_source_id, begin_frame_number,
961 oldest_incorporated_frame_, 0, has_updates);
962 if (begin_frame_source_)
963 begin_frame_source_->DidFinishFrame(this, ack);
964 }
965
966 void RenderWidgetHostViewAura::OnBeginFrameDidNotDraw(cc::BeginFrameAck ack) {
967 // DelegatedFrameHost may have skipped the last frame(s).
968 ack.oldest_incorporated_frame = oldest_incorporated_frame_;
969 if (begin_frame_source_)
970 begin_frame_source_->DidFinishFrame(this, ack);
942 } 971 }
943 972
944 void RenderWidgetHostViewAura::ClearCompositorFrame() { 973 void RenderWidgetHostViewAura::ClearCompositorFrame() {
945 delegated_frame_host_->ClearDelegatedFrame(); 974 delegated_frame_host_->ClearDelegatedFrame();
946 } 975 }
947 976
948 void RenderWidgetHostViewAura::DidStopFlinging() { 977 void RenderWidgetHostViewAura::DidStopFlinging() {
949 selection_controller_client_->OnScrollCompleted(); 978 selection_controller_client_->OnScrollCompleted();
950 } 979 }
951 980
(...skipping 1436 matching lines...) Expand 10 before | Expand all | Expand 10 after
2388 2417
2389 void RenderWidgetHostViewAura::SetPopupChild( 2418 void RenderWidgetHostViewAura::SetPopupChild(
2390 RenderWidgetHostViewAura* popup_child_host_view) { 2419 RenderWidgetHostViewAura* popup_child_host_view) {
2391 popup_child_host_view_ = popup_child_host_view; 2420 popup_child_host_view_ = popup_child_host_view;
2392 event_handler_->SetPopupChild( 2421 event_handler_->SetPopupChild(
2393 popup_child_host_view, 2422 popup_child_host_view,
2394 popup_child_host_view ? popup_child_host_view->event_handler() : nullptr); 2423 popup_child_host_view ? popup_child_host_view->event_handler() : nullptr);
2395 } 2424 }
2396 2425
2397 } // namespace content 2426 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698