OLD | NEW |
---|---|
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 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
380 bool is_guest_view_hack) | 380 bool is_guest_view_hack) |
381 : host_(RenderWidgetHostImpl::From(host)), | 381 : host_(RenderWidgetHostImpl::From(host)), |
382 window_(nullptr), | 382 window_(nullptr), |
383 in_shutdown_(false), | 383 in_shutdown_(false), |
384 in_bounds_changed_(false), | 384 in_bounds_changed_(false), |
385 popup_parent_host_view_(nullptr), | 385 popup_parent_host_view_(nullptr), |
386 popup_child_host_view_(nullptr), | 386 popup_child_host_view_(nullptr), |
387 is_loading_(false), | 387 is_loading_(false), |
388 has_composition_text_(false), | 388 has_composition_text_(false), |
389 begin_frame_source_(nullptr), | 389 begin_frame_source_(nullptr), |
390 latest_confirmed_begin_frame_sequence_number_( | |
391 cc::BeginFrameArgs::kInvalidFrameNumber), | |
390 needs_begin_frames_(false), | 392 needs_begin_frames_(false), |
391 needs_flush_input_(false), | 393 needs_flush_input_(false), |
392 added_frame_observer_(false), | 394 added_frame_observer_(false), |
393 cursor_visibility_state_in_renderer_(UNKNOWN), | 395 cursor_visibility_state_in_renderer_(UNKNOWN), |
394 #if defined(OS_WIN) | 396 #if defined(OS_WIN) |
395 legacy_render_widget_host_HWND_(nullptr), | 397 legacy_render_widget_host_HWND_(nullptr), |
396 legacy_window_destroyed_(false), | 398 legacy_window_destroyed_(false), |
397 virtual_keyboard_requested_(false), | 399 virtual_keyboard_requested_(false), |
398 #endif | 400 #endif |
399 has_snapped_to_boundary_(false), | 401 has_snapped_to_boundary_(false), |
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
668 if (needs_frame == added_frame_observer_) | 670 if (needs_frame == added_frame_observer_) |
669 return; | 671 return; |
670 | 672 |
671 added_frame_observer_ = needs_frame; | 673 added_frame_observer_ = needs_frame; |
672 if (needs_frame) | 674 if (needs_frame) |
673 begin_frame_source_->AddObserver(this); | 675 begin_frame_source_->AddObserver(this); |
674 else | 676 else |
675 begin_frame_source_->RemoveObserver(this); | 677 begin_frame_source_->RemoveObserver(this); |
676 } | 678 } |
677 | 679 |
678 void RenderWidgetHostViewAura::OnBeginFrame( | 680 void RenderWidgetHostViewAura::OnBeginFrame(const cc::BeginFrameArgs& args) { |
679 const cc::BeginFrameArgs& args) { | 681 if (args.source_id != last_begin_frame_args_.source_id) { |
682 // Source changed, we don't know our freshness anymore. | |
683 latest_confirmed_begin_frame_sequence_number_ = | |
684 cc::BeginFrameArgs::kInvalidFrameNumber; | |
685 } | |
686 | |
680 needs_flush_input_ = false; | 687 needs_flush_input_ = false; |
681 host_->FlushInput(); | 688 host_->FlushInput(); |
682 UpdateNeedsBeginFramesInternal(); | 689 UpdateNeedsBeginFramesInternal(); |
683 host_->Send(new ViewMsg_BeginFrame(host_->GetRoutingID(), args)); | 690 host_->Send(new ViewMsg_BeginFrame(host_->GetRoutingID(), args)); |
684 last_begin_frame_args_ = args; | 691 last_begin_frame_args_ = args; |
685 } | 692 } |
686 | 693 |
687 const cc::BeginFrameArgs& RenderWidgetHostViewAura::LastUsedBeginFrameArgs() | 694 const cc::BeginFrameArgs& RenderWidgetHostViewAura::LastUsedBeginFrameArgs() |
688 const { | 695 const { |
689 return last_begin_frame_args_; | 696 return last_begin_frame_args_; |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
943 selection.start.SetEdge(start_edge_top, start_edge_bottom); | 950 selection.start.SetEdge(start_edge_top, start_edge_bottom); |
944 selection.end.SetEdge(end_edge_top, end_edge_bottom); | 951 selection.end.SetEdge(end_edge_top, end_edge_bottom); |
945 } | 952 } |
946 | 953 |
947 if (delegated_frame_host_) { | 954 if (delegated_frame_host_) { |
948 delegated_frame_host_->SwapDelegatedFrame(compositor_frame_sink_id, | 955 delegated_frame_host_->SwapDelegatedFrame(compositor_frame_sink_id, |
949 std::move(frame)); | 956 std::move(frame)); |
950 } | 957 } |
951 selection_controller_->OnSelectionBoundsChanged(selection.start, | 958 selection_controller_->OnSelectionBoundsChanged(selection.start, |
952 selection.end); | 959 selection.end); |
960 | |
961 cc::BeginFrameAck ack(frame.metadata.begin_frame_ack); | |
962 DCHECK_LE(cc::BeginFrameArgs::kStartingFrameNumber, ack.sequence_number); | |
963 // The CompositorFrame's damage was only incorporated if it wasn't skipped. | |
964 if (delegated_frame_host_->skipped_frames()) { | |
965 ack.has_damage = false; | |
966 ack.latest_confirmed_sequence_number = | |
967 latest_confirmed_begin_frame_sequence_number_; | |
968 } else { | |
969 DCHECK(ack.has_damage); | |
970 latest_confirmed_begin_frame_sequence_number_ = | |
971 ack.latest_confirmed_sequence_number; | |
972 } | |
973 | |
974 if (begin_frame_source_) | |
975 begin_frame_source_->DidFinishFrame(this, ack); | |
Eric Seckler
2017/03/14 11:13:41
+fsamuel, +brianderson:
Regarding the discussion
Fady Samuel
2017/03/14 11:31:38
Could we do this from Surface::ActivateFrame then,
| |
976 } | |
977 | |
978 void RenderWidgetHostViewAura::OnBeginFrameDidNotDraw( | |
979 const cc::BeginFrameAck& ack) { | |
980 DCHECK_LE(cc::BeginFrameArgs::kStartingFrameNumber, ack.sequence_number); | |
981 DCHECK(!ack.has_damage); | |
982 cc::BeginFrameAck modified_ack = ack; | |
983 if (delegated_frame_host_->skipped_frames()) { | |
984 // If DelegatedFrameHost skipped the last frame(s), we need to wait for a | |
985 // newly submitted CompositorFrame before confirming newer sequence numbers. | |
986 modified_ack.latest_confirmed_sequence_number = | |
987 latest_confirmed_begin_frame_sequence_number_; | |
988 } | |
989 if (begin_frame_source_) | |
990 begin_frame_source_->DidFinishFrame(this, modified_ack); | |
953 } | 991 } |
954 | 992 |
955 void RenderWidgetHostViewAura::ClearCompositorFrame() { | 993 void RenderWidgetHostViewAura::ClearCompositorFrame() { |
956 if (delegated_frame_host_) | 994 if (delegated_frame_host_) |
957 delegated_frame_host_->ClearDelegatedFrame(); | 995 delegated_frame_host_->ClearDelegatedFrame(); |
958 } | 996 } |
959 | 997 |
960 void RenderWidgetHostViewAura::DidStopFlinging() { | 998 void RenderWidgetHostViewAura::DidStopFlinging() { |
961 selection_controller_client_->OnScrollCompleted(); | 999 selection_controller_client_->OnScrollCompleted(); |
962 } | 1000 } |
(...skipping 1413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2376 | 2414 |
2377 void RenderWidgetHostViewAura::SetPopupChild( | 2415 void RenderWidgetHostViewAura::SetPopupChild( |
2378 RenderWidgetHostViewAura* popup_child_host_view) { | 2416 RenderWidgetHostViewAura* popup_child_host_view) { |
2379 popup_child_host_view_ = popup_child_host_view; | 2417 popup_child_host_view_ = popup_child_host_view; |
2380 event_handler_->SetPopupChild( | 2418 event_handler_->SetPopupChild( |
2381 popup_child_host_view, | 2419 popup_child_host_view, |
2382 popup_child_host_view ? popup_child_host_view->event_handler() : nullptr); | 2420 popup_child_host_view ? popup_child_host_view->event_handler() : nullptr); |
2383 } | 2421 } |
2384 | 2422 |
2385 } // namespace content | 2423 } // namespace content |
OLD | NEW |