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

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

Issue 2897053002: [cc] Remove BeginFrameAck from BFS::DidFinishFrame and update tests. (Closed)
Patch Set: fix exo compile error Created 3 years, 7 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 3287 matching lines...) Expand 10 before | Expand all | Expand 10 after
3298 public: 3298 public:
3299 void OnAddObserver(cc::BeginFrameObserver* obs) override { 3299 void OnAddObserver(cc::BeginFrameObserver* obs) override {
3300 last_observer_ = obs; 3300 last_observer_ = obs;
3301 } 3301 }
3302 void OnRemoveObserver(cc::BeginFrameObserver* obs) override {} 3302 void OnRemoveObserver(cc::BeginFrameObserver* obs) override {}
3303 3303
3304 cc::BeginFrameObserver* last_observer_ = nullptr; 3304 cc::BeginFrameObserver* last_observer_ = nullptr;
3305 }; 3305 };
3306 } // namespace 3306 } // namespace
3307 3307
3308 // Tests that BeginFrameAcks are forwarded correctly from the 3308 // TODO(eseckler): Add back tests for BeginFrameAck forwarding through
3309 // SwapCompositorFrame and OnDidNotProduceFrame IPCs through DelegatedFrameHost 3309 // RenderWidgetHostViewAura and CompositorFrameSinkSupport when we add plumbing
3310 // and its CompositorFrameSinkSupport. 3310 // of BeginFrameAcks through SurfaceObservers.
3311 TEST_F(RenderWidgetHostViewAuraTest, ForwardsBeginFrameAcks) {
3312 gfx::Rect view_rect(100, 100);
3313 gfx::Size frame_size = view_rect.size();
3314
3315 view_->InitAsChild(nullptr);
3316 aura::client::ParentWindowWithContext(
3317 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(),
3318 gfx::Rect());
3319 view_->SetSize(view_rect.size());
3320
3321 // Replace BeginFrameSource so that we can observe acknowledgments. Since the
3322 // DelegatedFrameHost doesn't directly observe our BeginFrameSource,
3323 // |observer_tracker| grabs a pointer to the observer (the
3324 // DelegatedFrameHost's CompositorFrameSinkSupport).
3325 LastObserverTracker observer_tracker;
3326 cc::FakeExternalBeginFrameSource source(0.f, false);
3327 uint32_t source_id = source.source_id();
3328 source.SetClient(&observer_tracker);
3329 cc::FrameSinkId frame_sink_id =
3330 view_->GetDelegatedFrameHost()->GetFrameSinkId();
3331 ImageTransportFactory* factory = ImageTransportFactory::GetInstance();
3332 cc::SurfaceManager* surface_manager =
3333 factory->GetContextFactoryPrivate()->GetSurfaceManager();
3334 surface_manager->RegisterBeginFrameSource(&source, frame_sink_id);
3335 view_->SetNeedsBeginFrames(true);
3336 EXPECT_TRUE(observer_tracker.last_observer_);
3337
3338 {
3339 cc::BeginFrameArgs args =
3340 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 5u);
3341 source.TestOnBeginFrame(args);
3342
3343 // Ack from CompositorFrame is forwarded.
3344 cc::BeginFrameAck ack(source_id, 5, 4, true);
3345 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect);
3346 frame.metadata.begin_frame_ack = ack;
3347 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame));
3348 view_->RunOnCompositingDidCommit();
3349 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
3350 }
3351
3352 {
3353 cc::BeginFrameArgs args =
3354 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 6u);
3355 source.TestOnBeginFrame(args);
3356
3357 // Explicit ack through OnDidNotProduceFrame is forwarded.
3358 cc::BeginFrameAck ack(source_id, 6, 4, false);
3359 view_->OnDidNotProduceFrame(ack);
3360 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
3361 }
3362
3363 // Lock the compositor. Now we should drop frames and, thus,
3364 // latest_confirmed_sequence_number should not change.
3365 view_rect = gfx::Rect(150, 150);
3366 view_->SetSize(view_rect.size());
3367
3368 {
3369 cc::BeginFrameArgs args =
3370 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 7u);
3371 source.TestOnBeginFrame(args);
3372
3373 // Ack from CompositorFrame is forwarded with old
3374 // latest_confirmed_sequence_number and without damage.
3375 cc::BeginFrameAck ack(source_id, 7, 7, true);
3376 gfx::Rect dropped_damage_rect(10, 20, 30, 40);
3377 cc::CompositorFrame frame =
3378 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect);
3379 frame.metadata.begin_frame_ack = ack;
3380 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame));
3381 view_->RunOnCompositingDidCommit();
3382 ack.latest_confirmed_sequence_number = 4;
3383 ack.has_damage = false;
3384 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
3385 }
3386
3387 // Change source_id known to the view. This should reset the
3388 // latest_confirmed_sequence_number tracked by the view.
3389 source_id = cc::BeginFrameArgs::kManualSourceId;
3390
3391 {
3392 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting(
3393 BEGINFRAME_FROM_HERE, source_id, 10u);
3394 source.TestOnBeginFrame(args);
3395
3396 // Ack from CompositorFrame is forwarded with invalid
3397 // latest_confirmed_sequence_number and without damage.
3398 cc::BeginFrameAck ack(source_id, 10, 10, true);
3399 gfx::Rect dropped_damage_rect(10, 20, 30, 40);
3400 cc::CompositorFrame frame =
3401 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect);
3402 frame.metadata.begin_frame_ack = ack;
3403 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame));
3404 view_->RunOnCompositingDidCommit();
3405 ack.latest_confirmed_sequence_number =
3406 cc::BeginFrameArgs::kInvalidFrameNumber;
3407 ack.has_damage = false;
3408 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
3409 }
3410
3411 {
3412 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting(
3413 BEGINFRAME_FROM_HERE, source_id, 11u);
3414 source.TestOnBeginFrame(args);
3415
3416 // Explicit ack through OnDidNotProduceFrame is forwarded with invalid
3417 // latest_confirmed_sequence_number.
3418 cc::BeginFrameAck ack(source_id, 11, 11, false);
3419 view_->OnDidNotProduceFrame(ack);
3420 ack.latest_confirmed_sequence_number =
3421 cc::BeginFrameArgs::kInvalidFrameNumber;
3422 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
3423 }
3424
3425 // Unlock the compositor again with a new CompositorFrame of correct size.
3426 frame_size = view_rect.size();
3427
3428 {
3429 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting(
3430 BEGINFRAME_FROM_HERE, source_id, 12u);
3431 source.TestOnBeginFrame(args);
3432
3433 // Ack from CompositorFrame is forwarded.
3434 cc::BeginFrameAck ack(source_id, 12, 12, true);
3435 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect);
3436 frame.metadata.begin_frame_ack = ack;
3437 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame));
3438 view_->RunOnCompositingDidCommit();
3439 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
3440 }
3441
3442 {
3443 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting(
3444 BEGINFRAME_FROM_HERE, source_id, 13u);
3445 source.TestOnBeginFrame(args);
3446
3447 // Explicit ack through OnDidNotProduceFrame is forwarded.
3448 cc::BeginFrameAck ack(source_id, 13, 13, false);
3449 view_->OnDidNotProduceFrame(ack);
3450 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
3451 }
3452
3453 surface_manager->UnregisterBeginFrameSource(&source);
3454 }
3455 3311
3456 class RenderWidgetHostViewAuraCopyRequestTest 3312 class RenderWidgetHostViewAuraCopyRequestTest
3457 : public RenderWidgetHostViewAuraShutdownTest { 3313 : public RenderWidgetHostViewAuraShutdownTest {
3458 public: 3314 public:
3459 RenderWidgetHostViewAuraCopyRequestTest() 3315 RenderWidgetHostViewAuraCopyRequestTest()
3460 : callback_count_(0), 3316 : callback_count_(0),
3461 result_(false), 3317 result_(false),
3462 frame_subscriber_(nullptr), 3318 frame_subscriber_(nullptr),
3463 tick_clock_(nullptr), 3319 tick_clock_(nullptr),
3464 view_rect_(100, 100) {} 3320 view_rect_(100, 100) {}
(...skipping 2420 matching lines...) Expand 10 before | Expand all | Expand 10 after
5885 // There is no composition in the beginning. 5741 // There is no composition in the beginning.
5886 EXPECT_FALSE(has_composition_text()); 5742 EXPECT_FALSE(has_composition_text());
5887 SetHasCompositionTextToTrue(); 5743 SetHasCompositionTextToTrue();
5888 view->ImeCancelComposition(); 5744 view->ImeCancelComposition();
5889 // The composition must have been canceled. 5745 // The composition must have been canceled.
5890 EXPECT_FALSE(has_composition_text()); 5746 EXPECT_FALSE(has_composition_text());
5891 } 5747 }
5892 } 5748 }
5893 5749
5894 } // namespace content 5750 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698