| 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 <stddef.h> | 7 #include <stddef.h> | 
| 8 #include <stdint.h> | 8 #include <stdint.h> | 
| 9 | 9 | 
| 10 #include <tuple> | 10 #include <tuple> | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 22 #include "base/test/scoped_feature_list.h" | 22 #include "base/test/scoped_feature_list.h" | 
| 23 #include "base/test/simple_test_tick_clock.h" | 23 #include "base/test/simple_test_tick_clock.h" | 
| 24 #include "base/threading/thread_task_runner_handle.h" | 24 #include "base/threading/thread_task_runner_handle.h" | 
| 25 #include "build/build_config.h" | 25 #include "build/build_config.h" | 
| 26 #include "cc/output/begin_frame_args.h" | 26 #include "cc/output/begin_frame_args.h" | 
| 27 #include "cc/output/compositor_frame.h" | 27 #include "cc/output/compositor_frame.h" | 
| 28 #include "cc/output/compositor_frame_metadata.h" | 28 #include "cc/output/compositor_frame_metadata.h" | 
| 29 #include "cc/output/copy_output_request.h" | 29 #include "cc/output/copy_output_request.h" | 
| 30 #include "cc/surfaces/surface.h" | 30 #include "cc/surfaces/surface.h" | 
| 31 #include "cc/surfaces/surface_manager.h" | 31 #include "cc/surfaces/surface_manager.h" | 
|  | 32 #include "cc/test/begin_frame_args_test.h" | 
|  | 33 #include "cc/test/fake_external_begin_frame_source.h" | 
| 32 #include "components/display_compositor/gl_helper.h" | 34 #include "components/display_compositor/gl_helper.h" | 
| 33 #include "content/browser/browser_thread_impl.h" | 35 #include "content/browser/browser_thread_impl.h" | 
| 34 #include "content/browser/compositor/test/no_transport_image_transport_factory.h
      " | 36 #include "content/browser/compositor/test/no_transport_image_transport_factory.h
      " | 
| 35 #include "content/browser/frame_host/render_widget_host_view_guest.h" | 37 #include "content/browser/frame_host/render_widget_host_view_guest.h" | 
| 36 #include "content/browser/gpu/compositor_util.h" | 38 #include "content/browser/gpu/compositor_util.h" | 
| 37 #include "content/browser/renderer_host/delegated_frame_host.h" | 39 #include "content/browser/renderer_host/delegated_frame_host.h" | 
| 38 #include "content/browser/renderer_host/delegated_frame_host_client_aura.h" | 40 #include "content/browser/renderer_host/delegated_frame_host_client_aura.h" | 
| 39 #include "content/browser/renderer_host/input/input_router.h" | 41 #include "content/browser/renderer_host/input/input_router.h" | 
| 40 #include "content/browser/renderer_host/input/mouse_wheel_event_queue.h" | 42 #include "content/browser/renderer_host/input/mouse_wheel_event_queue.h" | 
| 41 #include "content/browser/renderer_host/overscroll_controller.h" | 43 #include "content/browser/renderer_host/overscroll_controller.h" | 
| (...skipping 1810 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1852   aura::Env::GetInstance()->set_last_mouse_location(gfx::Point(161, 161)); | 1854   aura::Env::GetInstance()->set_last_mouse_location(gfx::Point(161, 161)); | 
| 1853   view_->UpdateCursorIfOverSelf(); | 1855   view_->UpdateCursorIfOverSelf(); | 
| 1854   EXPECT_EQ(0, cursor_client.calls_to_set_cursor()); | 1856   EXPECT_EQ(0, cursor_client.calls_to_set_cursor()); | 
| 1855 } | 1857 } | 
| 1856 | 1858 | 
| 1857 cc::CompositorFrame MakeDelegatedFrame(float scale_factor, | 1859 cc::CompositorFrame MakeDelegatedFrame(float scale_factor, | 
| 1858                                        gfx::Size size, | 1860                                        gfx::Size size, | 
| 1859                                        gfx::Rect damage) { | 1861                                        gfx::Rect damage) { | 
| 1860   cc::CompositorFrame frame; | 1862   cc::CompositorFrame frame; | 
| 1861   frame.metadata.device_scale_factor = scale_factor; | 1863   frame.metadata.device_scale_factor = scale_factor; | 
|  | 1864   frame.metadata.begin_frame_ack = cc::BeginFrameAck(0, 1, 1, 0, true); | 
| 1862 | 1865 | 
| 1863   std::unique_ptr<cc::RenderPass> pass = cc::RenderPass::Create(); | 1866   std::unique_ptr<cc::RenderPass> pass = cc::RenderPass::Create(); | 
| 1864   pass->SetNew(1, gfx::Rect(size), damage, gfx::Transform()); | 1867   pass->SetNew(1, gfx::Rect(size), damage, gfx::Transform()); | 
| 1865   frame.render_pass_list.push_back(std::move(pass)); | 1868   frame.render_pass_list.push_back(std::move(pass)); | 
| 1866   if (!size.IsEmpty()) { | 1869   if (!size.IsEmpty()) { | 
| 1867     cc::TransferableResource resource; | 1870     cc::TransferableResource resource; | 
| 1868     resource.id = 1; | 1871     resource.id = 1; | 
| 1869     frame.resource_list.push_back(std::move(resource)); | 1872     frame.resource_list.push_back(std::move(resource)); | 
| 1870   } | 1873   } | 
| 1871   return frame; | 1874   return frame; | 
| (...skipping 853 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2725   ui::TouchEvent release( | 2728   ui::TouchEvent release( | 
| 2726       ui::ET_TOUCH_RELEASED, gfx::Point(20, 20), ui::EventTimeForNow(), | 2729       ui::ET_TOUCH_RELEASED, gfx::Point(20, 20), ui::EventTimeForNow(), | 
| 2727       ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH, 0)); | 2730       ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH, 0)); | 
| 2728   view_->OnTouchEvent(&press); | 2731   view_->OnTouchEvent(&press); | 
| 2729   view_->OnTouchEvent(&move); | 2732   view_->OnTouchEvent(&move); | 
| 2730   EXPECT_EQ(widget_host_->lastWheelOrTouchEventLatencyInfo.source_event_type(), | 2733   EXPECT_EQ(widget_host_->lastWheelOrTouchEventLatencyInfo.source_event_type(), | 
| 2731             ui::SourceEventType::TOUCH); | 2734             ui::SourceEventType::TOUCH); | 
| 2732   view_->OnTouchEvent(&release); | 2735   view_->OnTouchEvent(&release); | 
| 2733 } | 2736 } | 
| 2734 | 2737 | 
|  | 2738 namespace { | 
|  | 2739 class LastObserverTracker : public cc::FakeExternalBeginFrameSource::Client { | 
|  | 2740  public: | 
|  | 2741   void OnAddObserver(cc::BeginFrameObserver* obs) override { | 
|  | 2742     last_observer_ = obs; | 
|  | 2743   } | 
|  | 2744   void OnRemoveObserver(cc::BeginFrameObserver* obs) override {} | 
|  | 2745 | 
|  | 2746   cc::BeginFrameObserver* last_observer_ = nullptr; | 
|  | 2747 }; | 
|  | 2748 }  // namespace | 
|  | 2749 | 
|  | 2750 // Tests that BeginFrameAcks are forwarded correctly from the | 
|  | 2751 // SwapCompositorFrame and OnBeginFrameDidNotSwap IPCs through | 
|  | 2752 // DelegatedFrameHost and its CompositorFrameSinkSupport. | 
|  | 2753 TEST_F(RenderWidgetHostViewAuraTest, ForwardsBeginFrameAcks) { | 
|  | 2754   gfx::Rect view_rect(100, 100); | 
|  | 2755   gfx::Size frame_size = view_rect.size(); | 
|  | 2756 | 
|  | 2757   view_->InitAsChild(nullptr); | 
|  | 2758   aura::client::ParentWindowWithContext( | 
|  | 2759       view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), | 
|  | 2760       gfx::Rect()); | 
|  | 2761   view_->SetSize(view_rect.size()); | 
|  | 2762 | 
|  | 2763   // Replace BeginFrameSource so that we can observe acknowledgments. Since the | 
|  | 2764   // DelegatedFrameHost doesn't directly observe our BeginFrameSource, | 
|  | 2765   // |observer_tracker| grabs a pointer to the observer (the | 
|  | 2766   // DelegatedFrameHost's CompositorFrameSinkSupport). | 
|  | 2767   LastObserverTracker observer_tracker; | 
|  | 2768   cc::FakeExternalBeginFrameSource source(0.f, false); | 
|  | 2769   uint32_t source_id = source.source_id(); | 
|  | 2770   source.SetClient(&observer_tracker); | 
|  | 2771   cc::FrameSinkId frame_sink_id = | 
|  | 2772       view_->GetDelegatedFrameHost()->GetFrameSinkId(); | 
|  | 2773   ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); | 
|  | 2774   cc::SurfaceManager* surface_manager = | 
|  | 2775       factory->GetContextFactoryPrivate()->GetSurfaceManager(); | 
|  | 2776   surface_manager->RegisterBeginFrameSource(&source, frame_sink_id); | 
|  | 2777   view_->SetNeedsBeginFrames(true); | 
|  | 2778   EXPECT_TRUE(observer_tracker.last_observer_); | 
|  | 2779 | 
|  | 2780   { | 
|  | 2781     cc::BeginFrameArgs args = | 
|  | 2782         cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 5u); | 
|  | 2783     source.TestOnBeginFrame(args); | 
|  | 2784 | 
|  | 2785     // Ack from CompositorFrame is forwarded. | 
|  | 2786     cc::BeginFrameAck ack(source_id, 5, 4, 0, true); | 
|  | 2787     cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect); | 
|  | 2788     frame.metadata.begin_frame_ack = ack; | 
|  | 2789     view_->OnSwapCompositorFrame(0, std::move(frame)); | 
|  | 2790     view_->RunOnCompositingDidCommit(); | 
|  | 2791     EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); | 
|  | 2792   } | 
|  | 2793 | 
|  | 2794   { | 
|  | 2795     cc::BeginFrameArgs args = | 
|  | 2796         cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 6u); | 
|  | 2797     source.TestOnBeginFrame(args); | 
|  | 2798 | 
|  | 2799     // Explicit ack through OnBeginFrameDidNotSwap is forwarded. | 
|  | 2800     cc::BeginFrameAck ack(source_id, 6, 4, 0, false); | 
|  | 2801     view_->OnBeginFrameDidNotSwap(ack); | 
|  | 2802     EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); | 
|  | 2803   } | 
|  | 2804 | 
|  | 2805   // Lock the compositor. Now we should drop frames and, thus, | 
|  | 2806   // latest_confirmed_sequence_number should not change. | 
|  | 2807   view_rect = gfx::Rect(150, 150); | 
|  | 2808   view_->SetSize(view_rect.size()); | 
|  | 2809 | 
|  | 2810   { | 
|  | 2811     cc::BeginFrameArgs args = | 
|  | 2812         cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 7u); | 
|  | 2813     source.TestOnBeginFrame(args); | 
|  | 2814 | 
|  | 2815     // Ack from CompositorFrame is forwarded with old | 
|  | 2816     // latest_confirmed_sequence_number and without damage. | 
|  | 2817     cc::BeginFrameAck ack(source_id, 7, 7, 0, true); | 
|  | 2818     gfx::Rect dropped_damage_rect(10, 20, 30, 40); | 
|  | 2819     cc::CompositorFrame frame = | 
|  | 2820         MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect); | 
|  | 2821     frame.metadata.begin_frame_ack = ack; | 
|  | 2822     view_->OnSwapCompositorFrame(0, std::move(frame)); | 
|  | 2823     view_->RunOnCompositingDidCommit(); | 
|  | 2824     ack.latest_confirmed_sequence_number = 4; | 
|  | 2825     ack.has_damage = false; | 
|  | 2826     EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); | 
|  | 2827   } | 
|  | 2828 | 
|  | 2829   // Change source_id known to the view. This should reset the | 
|  | 2830   // latest_confirmed_sequence_number tracked by the view. | 
|  | 2831   source_id = cc::BeginFrameArgs::kManualSourceId; | 
|  | 2832 | 
|  | 2833   { | 
|  | 2834     cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( | 
|  | 2835         BEGINFRAME_FROM_HERE, source_id, 10u); | 
|  | 2836     source.TestOnBeginFrame(args); | 
|  | 2837 | 
|  | 2838     // Ack from CompositorFrame is forwarded with invalid | 
|  | 2839     // latest_confirmed_sequence_number and without damage. | 
|  | 2840     cc::BeginFrameAck ack(source_id, 10, 10, 0, true); | 
|  | 2841     gfx::Rect dropped_damage_rect(10, 20, 30, 40); | 
|  | 2842     cc::CompositorFrame frame = | 
|  | 2843         MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect); | 
|  | 2844     frame.metadata.begin_frame_ack = ack; | 
|  | 2845     view_->OnSwapCompositorFrame(0, std::move(frame)); | 
|  | 2846     view_->RunOnCompositingDidCommit(); | 
|  | 2847     ack.latest_confirmed_sequence_number = | 
|  | 2848         cc::BeginFrameArgs::kInvalidFrameNumber; | 
|  | 2849     ack.has_damage = false; | 
|  | 2850     EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); | 
|  | 2851   } | 
|  | 2852 | 
|  | 2853   { | 
|  | 2854     cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( | 
|  | 2855         BEGINFRAME_FROM_HERE, source_id, 11u); | 
|  | 2856     source.TestOnBeginFrame(args); | 
|  | 2857 | 
|  | 2858     // Explicit ack through OnBeginFrameDidNotSwap is forwarded with invalid | 
|  | 2859     // latest_confirmed_sequence_number. | 
|  | 2860     cc::BeginFrameAck ack(source_id, 11, 11, 0, false); | 
|  | 2861     view_->OnBeginFrameDidNotSwap(ack); | 
|  | 2862     ack.latest_confirmed_sequence_number = | 
|  | 2863         cc::BeginFrameArgs::kInvalidFrameNumber; | 
|  | 2864     EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); | 
|  | 2865   } | 
|  | 2866 | 
|  | 2867   // Unlock the compositor again with a new CompositorFrame of correct size. | 
|  | 2868   frame_size = view_rect.size(); | 
|  | 2869 | 
|  | 2870   { | 
|  | 2871     cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( | 
|  | 2872         BEGINFRAME_FROM_HERE, source_id, 12u); | 
|  | 2873     source.TestOnBeginFrame(args); | 
|  | 2874 | 
|  | 2875     // Ack from CompositorFrame is forwarded. | 
|  | 2876     cc::BeginFrameAck ack(source_id, 12, 12, 0, true); | 
|  | 2877     cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect); | 
|  | 2878     frame.metadata.begin_frame_ack = ack; | 
|  | 2879     view_->OnSwapCompositorFrame(0, std::move(frame)); | 
|  | 2880     view_->RunOnCompositingDidCommit(); | 
|  | 2881     EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); | 
|  | 2882   } | 
|  | 2883 | 
|  | 2884   { | 
|  | 2885     cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( | 
|  | 2886         BEGINFRAME_FROM_HERE, source_id, 13u); | 
|  | 2887     source.TestOnBeginFrame(args); | 
|  | 2888 | 
|  | 2889     // Explicit ack through OnBeginFrameDidNotSwap is forwarded. | 
|  | 2890     cc::BeginFrameAck ack(source_id, 13, 13, 0, false); | 
|  | 2891     view_->OnBeginFrameDidNotSwap(ack); | 
|  | 2892     EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); | 
|  | 2893   } | 
|  | 2894 | 
|  | 2895   surface_manager->UnregisterBeginFrameSource(&source); | 
|  | 2896 } | 
|  | 2897 | 
| 2735 class RenderWidgetHostViewAuraCopyRequestTest | 2898 class RenderWidgetHostViewAuraCopyRequestTest | 
| 2736     : public RenderWidgetHostViewAuraShutdownTest { | 2899     : public RenderWidgetHostViewAuraShutdownTest { | 
| 2737  public: | 2900  public: | 
| 2738   RenderWidgetHostViewAuraCopyRequestTest() | 2901   RenderWidgetHostViewAuraCopyRequestTest() | 
| 2739       : callback_count_(0), | 2902       : callback_count_(0), | 
| 2740         result_(false), | 2903         result_(false), | 
| 2741         frame_subscriber_(nullptr), | 2904         frame_subscriber_(nullptr), | 
| 2742         tick_clock_(nullptr), | 2905         tick_clock_(nullptr), | 
| 2743         view_rect_(100, 100) {} | 2906         view_rect_(100, 100) {} | 
| 2744 | 2907 | 
| (...skipping 2096 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4841     // There is no composition in the beginning. | 5004     // There is no composition in the beginning. | 
| 4842     EXPECT_FALSE(has_composition_text()); | 5005     EXPECT_FALSE(has_composition_text()); | 
| 4843     SetHasCompositionTextToTrue(); | 5006     SetHasCompositionTextToTrue(); | 
| 4844     view->ImeCancelComposition(); | 5007     view->ImeCancelComposition(); | 
| 4845     // The composition must have been canceled. | 5008     // The composition must have been canceled. | 
| 4846     EXPECT_FALSE(has_composition_text()); | 5009     EXPECT_FALSE(has_composition_text()); | 
| 4847   } | 5010   } | 
| 4848 } | 5011 } | 
| 4849 | 5012 | 
| 4850 }  // namespace content | 5013 }  // namespace content | 
| OLD | NEW | 
|---|