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 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |