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

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

Issue 2740833005: [cc] Pass on BeginFrameAcks from CompositorEBFS through RWHVAura, DFH. (Closed)
Patch Set: add struct_traits tests. Created 3 years, 9 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
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 <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
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 1790 matching lines...) Expand 10 before | Expand all | Expand 10 after
1832 aura::Env::GetInstance()->set_last_mouse_location(gfx::Point(161, 161)); 1834 aura::Env::GetInstance()->set_last_mouse_location(gfx::Point(161, 161));
1833 view_->UpdateCursorIfOverSelf(); 1835 view_->UpdateCursorIfOverSelf();
1834 EXPECT_EQ(0, cursor_client.calls_to_set_cursor()); 1836 EXPECT_EQ(0, cursor_client.calls_to_set_cursor());
1835 } 1837 }
1836 1838
1837 cc::CompositorFrame MakeDelegatedFrame(float scale_factor, 1839 cc::CompositorFrame MakeDelegatedFrame(float scale_factor,
1838 gfx::Size size, 1840 gfx::Size size,
1839 gfx::Rect damage) { 1841 gfx::Rect damage) {
1840 cc::CompositorFrame frame; 1842 cc::CompositorFrame frame;
1841 frame.metadata.device_scale_factor = scale_factor; 1843 frame.metadata.device_scale_factor = scale_factor;
1844 frame.metadata.begin_frame_ack = cc::BeginFrameAck(0, 1, 1, 0, true);
1842 1845
1843 std::unique_ptr<cc::RenderPass> pass = cc::RenderPass::Create(); 1846 std::unique_ptr<cc::RenderPass> pass = cc::RenderPass::Create();
1844 pass->SetNew(1, gfx::Rect(size), damage, gfx::Transform()); 1847 pass->SetNew(1, gfx::Rect(size), damage, gfx::Transform());
1845 frame.render_pass_list.push_back(std::move(pass)); 1848 frame.render_pass_list.push_back(std::move(pass));
1846 if (!size.IsEmpty()) { 1849 if (!size.IsEmpty()) {
1847 cc::TransferableResource resource; 1850 cc::TransferableResource resource;
1848 resource.id = 1; 1851 resource.id = 1;
1849 frame.resource_list.push_back(std::move(resource)); 1852 frame.resource_list.push_back(std::move(resource));
1850 } 1853 }
1851 return frame; 1854 return frame;
(...skipping 850 matching lines...) Expand 10 before | Expand all | Expand 10 after
2702 ui::EventTimeForNow()); 2705 ui::EventTimeForNow());
2703 ui::TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(20, 20), 0, 2706 ui::TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(20, 20), 0,
2704 ui::EventTimeForNow()); 2707 ui::EventTimeForNow());
2705 view_->OnTouchEvent(&press); 2708 view_->OnTouchEvent(&press);
2706 view_->OnTouchEvent(&move); 2709 view_->OnTouchEvent(&move);
2707 EXPECT_EQ(widget_host_->lastWheelOrTouchEventLatencyInfo.source_event_type(), 2710 EXPECT_EQ(widget_host_->lastWheelOrTouchEventLatencyInfo.source_event_type(),
2708 ui::SourceEventType::TOUCH); 2711 ui::SourceEventType::TOUCH);
2709 view_->OnTouchEvent(&release); 2712 view_->OnTouchEvent(&release);
2710 } 2713 }
2711 2714
2715 namespace {
2716 class LastObserverTracker : public cc::FakeExternalBeginFrameSource::Client {
2717 public:
2718 void OnAddObserver(cc::BeginFrameObserver* obs) override {
2719 last_observer_ = obs;
2720 }
2721 void OnRemoveObserver(cc::BeginFrameObserver* obs) override {}
2722
2723 cc::BeginFrameObserver* last_observer_ = nullptr;
2724 };
2725 } // namespace
2726
2727 // Tests that BeginFrameAcks are forwarded correctly from the
2728 // SwapCompositorFrame and OnBeginFrameDidNotSwap IPCs through
2729 // DelegatedFrameHost and its CompositorFrameSinkSupport.
2730 TEST_F(RenderWidgetHostViewAuraTest, ForwardsBeginFrameAcks) {
2731 gfx::Rect view_rect(100, 100);
2732 gfx::Size frame_size = view_rect.size();
2733
2734 view_->InitAsChild(nullptr);
2735 aura::client::ParentWindowWithContext(
2736 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(),
2737 gfx::Rect());
2738 view_->SetSize(view_rect.size());
2739
2740 // Replace BeginFrameSource so that we can observe acknowledgments. Since the
2741 // DelegatedFrameHost doesn't directly observe our BeginFrameSource,
2742 // |observer_tracker| grabs a pointer to the observer (the
2743 // DelegatedFrameHost's CompositorFrameSinkSupport).
2744 LastObserverTracker observer_tracker;
2745 cc::FakeExternalBeginFrameSource source(0.f, false);
2746 uint32_t source_id = source.source_id();
2747 source.SetClient(&observer_tracker);
2748 cc::FrameSinkId frame_sink_id =
2749 view_->GetDelegatedFrameHost()->GetFrameSinkId();
2750 ImageTransportFactory* factory = ImageTransportFactory::GetInstance();
2751 cc::SurfaceManager* surface_manager =
2752 factory->GetContextFactoryPrivate()->GetSurfaceManager();
2753 surface_manager->RegisterBeginFrameSource(&source, frame_sink_id);
2754 view_->SetNeedsBeginFrames(true);
2755 EXPECT_TRUE(observer_tracker.last_observer_);
2756
2757 {
2758 cc::BeginFrameArgs args =
2759 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 5u);
2760 source.TestOnBeginFrame(args);
2761
2762 // Ack from CompositorFrame is forwarded.
2763 cc::BeginFrameAck ack(source_id, 5, 4, 0, true);
2764 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect);
2765 frame.metadata.begin_frame_ack = ack;
2766 view_->OnSwapCompositorFrame(0, std::move(frame));
2767 view_->RunOnCompositingDidCommit();
2768 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
2769 }
2770
2771 {
2772 cc::BeginFrameArgs args =
2773 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 6u);
2774 source.TestOnBeginFrame(args);
2775
2776 // Explicit ack through OnBeginFrameDidNotSwap is forwarded.
2777 cc::BeginFrameAck ack(source_id, 6, 4, 0, false);
2778 view_->OnBeginFrameDidNotSwap(ack);
2779 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
2780 }
2781
2782 // Lock the compositor. Now we should drop frames and, thus,
2783 // latest_confirmed_sequence_number should not change.
2784 view_rect = gfx::Rect(150, 150);
2785 view_->SetSize(view_rect.size());
2786
2787 {
2788 cc::BeginFrameArgs args =
2789 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 7u);
2790 source.TestOnBeginFrame(args);
2791
2792 // Ack from CompositorFrame is forwarded with old
2793 // latest_confirmed_sequence_number and without damage.
2794 cc::BeginFrameAck ack(source_id, 7, 7, 0, true);
2795 gfx::Rect dropped_damage_rect(10, 20, 30, 40);
2796 cc::CompositorFrame frame =
2797 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect);
2798 frame.metadata.begin_frame_ack = ack;
2799 view_->OnSwapCompositorFrame(0, std::move(frame));
2800 view_->RunOnCompositingDidCommit();
2801 ack.latest_confirmed_sequence_number = 4;
2802 ack.has_damage = false;
2803 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
2804 }
2805
2806 // Change source_id known to the view. This should reset the
2807 // latest_confirmed_sequence_number tracked by the view.
2808 source_id = cc::BeginFrameArgs::kManualSourceId;
2809
2810 {
2811 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting(
2812 BEGINFRAME_FROM_HERE, source_id, 10u);
2813 source.TestOnBeginFrame(args);
2814
2815 // Ack from CompositorFrame is forwarded with invalid
2816 // latest_confirmed_sequence_number and without damage.
2817 cc::BeginFrameAck ack(source_id, 10, 10, 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 =
2825 cc::BeginFrameArgs::kInvalidFrameNumber;
2826 ack.has_damage = false;
2827 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
2828 }
2829
2830 {
2831 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting(
2832 BEGINFRAME_FROM_HERE, source_id, 11u);
2833 source.TestOnBeginFrame(args);
2834
2835 // Explicit ack through OnBeginFrameDidNotSwap is forwarded with invalid
2836 // latest_confirmed_sequence_number.
2837 cc::BeginFrameAck ack(source_id, 11, 11, 0, false);
2838 view_->OnBeginFrameDidNotSwap(ack);
2839 ack.latest_confirmed_sequence_number =
2840 cc::BeginFrameArgs::kInvalidFrameNumber;
2841 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
2842 }
2843
2844 // Unlock the compositor again with a new CompositorFrame of correct size.
2845 frame_size = view_rect.size();
2846
2847 {
2848 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting(
2849 BEGINFRAME_FROM_HERE, source_id, 12u);
2850 source.TestOnBeginFrame(args);
2851
2852 // Ack from CompositorFrame is forwarded.
2853 cc::BeginFrameAck ack(source_id, 12, 12, 0, true);
2854 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect);
2855 frame.metadata.begin_frame_ack = ack;
2856 view_->OnSwapCompositorFrame(0, std::move(frame));
2857 view_->RunOnCompositingDidCommit();
2858 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
2859 }
2860
2861 {
2862 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting(
2863 BEGINFRAME_FROM_HERE, source_id, 13u);
2864 source.TestOnBeginFrame(args);
2865
2866 // Explicit ack through OnBeginFrameDidNotSwap is forwarded.
2867 cc::BeginFrameAck ack(source_id, 13, 13, 0, false);
2868 view_->OnBeginFrameDidNotSwap(ack);
2869 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
2870 }
2871
2872 surface_manager->UnregisterBeginFrameSource(&source);
2873 }
2874
2712 class RenderWidgetHostViewAuraCopyRequestTest 2875 class RenderWidgetHostViewAuraCopyRequestTest
2713 : public RenderWidgetHostViewAuraShutdownTest { 2876 : public RenderWidgetHostViewAuraShutdownTest {
2714 public: 2877 public:
2715 RenderWidgetHostViewAuraCopyRequestTest() 2878 RenderWidgetHostViewAuraCopyRequestTest()
2716 : callback_count_(0), 2879 : callback_count_(0),
2717 result_(false), 2880 result_(false),
2718 frame_subscriber_(nullptr), 2881 frame_subscriber_(nullptr),
2719 tick_clock_(nullptr), 2882 tick_clock_(nullptr),
2720 view_rect_(100, 100) {} 2883 view_rect_(100, 100) {}
2721 2884
(...skipping 2091 matching lines...) Expand 10 before | Expand all | Expand 10 after
4813 // There is no composition in the beginning. 4976 // There is no composition in the beginning.
4814 EXPECT_FALSE(has_composition_text()); 4977 EXPECT_FALSE(has_composition_text());
4815 SetHasCompositionTextToTrue(); 4978 SetHasCompositionTextToTrue();
4816 view->ImeCancelComposition(); 4979 view->ImeCancelComposition();
4817 // The composition must have been canceled. 4980 // The composition must have been canceled.
4818 EXPECT_FALSE(has_composition_text()); 4981 EXPECT_FALSE(has_composition_text());
4819 } 4982 }
4820 } 4983 }
4821 4984
4822 } // namespace content 4985 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698