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

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

Powered by Google App Engine
This is Rietveld 408576698