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

Side by Side Diff: cc/scheduler/scheduler_unittest.cc

Issue 2779633002: [cc] Remove remaining_frames from BeginFrameAck. (Closed)
Patch Set: 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
« no previous file with comments | « cc/scheduler/scheduler.cc ('k') | cc/surfaces/compositor_frame_sink_support.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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 "cc/scheduler/scheduler.h" 5 #include "cc/scheduler/scheduler.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 2850 matching lines...) Expand 10 before | Expand all | Expand 10 after
2861 SetUpScheduler(EXTERNAL_BFS); 2861 SetUpScheduler(EXTERNAL_BFS);
2862 2862
2863 // Expect the last ack to be for last BeginFrame, which didn't cause damage. 2863 // Expect the last ack to be for last BeginFrame, which didn't cause damage.
2864 uint64_t last_begin_frame_number = 2864 uint64_t last_begin_frame_number =
2865 fake_external_begin_frame_source_->next_begin_frame_number() - 1; 2865 fake_external_begin_frame_source_->next_begin_frame_number() - 1;
2866 uint64_t latest_confirmed_sequence_number = last_begin_frame_number; 2866 uint64_t latest_confirmed_sequence_number = last_begin_frame_number;
2867 bool has_damage = false; 2867 bool has_damage = false;
2868 EXPECT_EQ( 2868 EXPECT_EQ(
2869 BeginFrameAck(fake_external_begin_frame_source_->source_id(), 2869 BeginFrameAck(fake_external_begin_frame_source_->source_id(),
2870 last_begin_frame_number, latest_confirmed_sequence_number, 2870 last_begin_frame_number, latest_confirmed_sequence_number,
2871 0, has_damage), 2871 has_damage),
2872 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get())); 2872 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get()));
2873 2873
2874 scheduler_->SetNeedsBeginMainFrame(); 2874 scheduler_->SetNeedsBeginMainFrame();
2875 EXPECT_SINGLE_ACTION("AddObserver(this)", client_); 2875 EXPECT_SINGLE_ACTION("AddObserver(this)", client_);
2876 client_->Reset(); 2876 client_->Reset();
2877 2877
2878 // Next vsync. 2878 // Next vsync.
2879 BeginFrameArgs args = SendNextBeginFrame(); 2879 BeginFrameArgs args = SendNextBeginFrame();
2880 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); 2880 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
2881 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2); 2881 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2);
2882 EXPECT_FALSE(client_->IsInsideBeginImplFrame()); 2882 EXPECT_FALSE(client_->IsInsideBeginImplFrame());
2883 client_->Reset(); 2883 client_->Reset();
2884 2884
2885 has_damage = false; 2885 has_damage = false;
2886 EXPECT_EQ( 2886 EXPECT_EQ(
2887 BeginFrameAck(args.source_id, args.sequence_number, 2887 BeginFrameAck(args.source_id, args.sequence_number,
2888 latest_confirmed_sequence_number, 0, has_damage), 2888 latest_confirmed_sequence_number, has_damage),
2889 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get())); 2889 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get()));
2890 2890
2891 scheduler_->NotifyBeginMainFrameStarted(base::TimeTicks()); 2891 scheduler_->NotifyBeginMainFrameStarted(base::TimeTicks());
2892 EXPECT_NO_ACTION(client_); 2892 EXPECT_NO_ACTION(client_);
2893 2893
2894 // Next vsync. 2894 // Next vsync.
2895 args = SendNextBeginFrame(); 2895 args = SendNextBeginFrame();
2896 EXPECT_SINGLE_ACTION("WillBeginImplFrame", client_); 2896 EXPECT_SINGLE_ACTION("WillBeginImplFrame", client_);
2897 EXPECT_FALSE(client_->IsInsideBeginImplFrame()); 2897 EXPECT_FALSE(client_->IsInsideBeginImplFrame());
2898 client_->Reset(); 2898 client_->Reset();
2899 2899
2900 has_damage = false; 2900 has_damage = false;
2901 EXPECT_EQ( 2901 EXPECT_EQ(
2902 BeginFrameAck(args.source_id, args.sequence_number, 2902 BeginFrameAck(args.source_id, args.sequence_number,
2903 latest_confirmed_sequence_number, 0, has_damage), 2903 latest_confirmed_sequence_number, has_damage),
2904 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get())); 2904 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get()));
2905 2905
2906 scheduler_->NotifyReadyToCommit(); 2906 scheduler_->NotifyReadyToCommit();
2907 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_); 2907 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_);
2908 client_->Reset(); 2908 client_->Reset();
2909 2909
2910 scheduler_->NotifyReadyToActivate(); 2910 scheduler_->NotifyReadyToActivate();
2911 EXPECT_SINGLE_ACTION("ScheduledActionActivateSyncTree", client_); 2911 EXPECT_SINGLE_ACTION("ScheduledActionActivateSyncTree", client_);
2912 client_->Reset(); 2912 client_->Reset();
2913 2913
2914 // Next vsync. 2914 // Next vsync.
2915 args = SendNextBeginFrame(); 2915 args = SendNextBeginFrame();
2916 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); 2916 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
2917 EXPECT_ACTION("ScheduledActionInvalidateCompositorFrameSink", client_, 1, 2); 2917 EXPECT_ACTION("ScheduledActionInvalidateCompositorFrameSink", client_, 1, 2);
2918 EXPECT_FALSE(client_->IsInsideBeginImplFrame()); 2918 EXPECT_FALSE(client_->IsInsideBeginImplFrame());
2919 client_->Reset(); 2919 client_->Reset();
2920 2920
2921 // Not confirmed yet and no damage, since not drawn yet. 2921 // Not confirmed yet and no damage, since not drawn yet.
2922 // TODO(eseckler): In the future, |has_damage = false| will prevent us from 2922 // TODO(eseckler): In the future, |has_damage = false| will prevent us from
2923 // filtering this ack (in CompositorExternalBeginFrameSource) and instead 2923 // filtering this ack (in CompositorExternalBeginFrameSource) and instead
2924 // forwarding the one attached to the later submitted CompositorFrame. 2924 // forwarding the one attached to the later submitted CompositorFrame.
2925 has_damage = false; 2925 has_damage = false;
2926 EXPECT_EQ( 2926 EXPECT_EQ(
2927 BeginFrameAck(args.source_id, args.sequence_number, 2927 BeginFrameAck(args.source_id, args.sequence_number,
2928 latest_confirmed_sequence_number, 0, has_damage), 2928 latest_confirmed_sequence_number, has_damage),
2929 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get())); 2929 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get()));
2930 2930
2931 // Android onDraw. 2931 // Android onDraw.
2932 scheduler_->SetNeedsRedraw(); 2932 scheduler_->SetNeedsRedraw();
2933 bool resourceless_software_draw = false; 2933 bool resourceless_software_draw = false;
2934 scheduler_->OnDrawForCompositorFrameSink(resourceless_software_draw); 2934 scheduler_->OnDrawForCompositorFrameSink(resourceless_software_draw);
2935 EXPECT_SINGLE_ACTION("ScheduledActionDrawIfPossible", client_); 2935 EXPECT_SINGLE_ACTION("ScheduledActionDrawIfPossible", client_);
2936 EXPECT_FALSE(client_->IsInsideBeginImplFrame()); 2936 EXPECT_FALSE(client_->IsInsideBeginImplFrame());
2937 client_->Reset(); 2937 client_->Reset();
2938 2938
2939 // Idle on next vsync. 2939 // Idle on next vsync.
2940 args = SendNextBeginFrame(); 2940 args = SendNextBeginFrame();
2941 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 3); 2941 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 3);
2942 EXPECT_ACTION("RemoveObserver(this)", client_, 1, 3); 2942 EXPECT_ACTION("RemoveObserver(this)", client_, 1, 3);
2943 EXPECT_ACTION("SendBeginMainFrameNotExpectedSoon", client_, 2, 3); 2943 EXPECT_ACTION("SendBeginMainFrameNotExpectedSoon", client_, 2, 3);
2944 EXPECT_FALSE(client_->IsInsideBeginImplFrame()); 2944 EXPECT_FALSE(client_->IsInsideBeginImplFrame());
2945 client_->Reset(); 2945 client_->Reset();
2946 2946
2947 latest_confirmed_sequence_number = args.sequence_number; 2947 latest_confirmed_sequence_number = args.sequence_number;
2948 has_damage = false; 2948 has_damage = false;
2949 EXPECT_EQ( 2949 EXPECT_EQ(
2950 BeginFrameAck(args.source_id, args.sequence_number, 2950 BeginFrameAck(args.source_id, args.sequence_number,
2951 latest_confirmed_sequence_number, 0, has_damage), 2951 latest_confirmed_sequence_number, has_damage),
2952 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get())); 2952 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get()));
2953 } 2953 }
2954 2954
2955 TEST_F(SchedulerTest, SynchronousCompositorDoubleCommitWithoutDraw) { 2955 TEST_F(SchedulerTest, SynchronousCompositorDoubleCommitWithoutDraw) {
2956 scheduler_settings_.using_synchronous_renderer_compositor = true; 2956 scheduler_settings_.using_synchronous_renderer_compositor = true;
2957 SetUpScheduler(EXTERNAL_BFS); 2957 SetUpScheduler(EXTERNAL_BFS);
2958 2958
2959 scheduler_->SetNeedsBeginMainFrame(); 2959 scheduler_->SetNeedsBeginMainFrame();
2960 EXPECT_SINGLE_ACTION("AddObserver(this)", client_); 2960 EXPECT_SINGLE_ACTION("AddObserver(this)", client_);
2961 client_->Reset(); 2961 client_->Reset();
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after
3379 SetUpScheduler(EXTERNAL_BFS); 3379 SetUpScheduler(EXTERNAL_BFS);
3380 3380
3381 // Expect the last ack to be for last BeginFrame, which didn't cause damage. 3381 // Expect the last ack to be for last BeginFrame, which didn't cause damage.
3382 uint64_t last_begin_frame_number = 3382 uint64_t last_begin_frame_number =
3383 fake_external_begin_frame_source_->next_begin_frame_number() - 1; 3383 fake_external_begin_frame_source_->next_begin_frame_number() - 1;
3384 uint64_t latest_confirmed_sequence_number = last_begin_frame_number; 3384 uint64_t latest_confirmed_sequence_number = last_begin_frame_number;
3385 bool has_damage = false; 3385 bool has_damage = false;
3386 EXPECT_EQ( 3386 EXPECT_EQ(
3387 BeginFrameAck(fake_external_begin_frame_source_->source_id(), 3387 BeginFrameAck(fake_external_begin_frame_source_->source_id(),
3388 last_begin_frame_number, latest_confirmed_sequence_number, 3388 last_begin_frame_number, latest_confirmed_sequence_number,
3389 0, has_damage), 3389 has_damage),
3390 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get())); 3390 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get()));
3391 3391
3392 // Run a successful redraw and verify that a new ack is sent. 3392 // Run a successful redraw and verify that a new ack is sent.
3393 scheduler_->SetNeedsRedraw(); 3393 scheduler_->SetNeedsRedraw();
3394 client_->Reset(); 3394 client_->Reset();
3395 3395
3396 BeginFrameArgs args = SendNextBeginFrame(); 3396 BeginFrameArgs args = SendNextBeginFrame();
3397 EXPECT_LT(latest_confirmed_sequence_number, args.sequence_number); 3397 EXPECT_LT(latest_confirmed_sequence_number, args.sequence_number);
3398 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 1); 3398 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 1);
3399 EXPECT_TRUE(client_->IsInsideBeginImplFrame()); 3399 EXPECT_TRUE(client_->IsInsideBeginImplFrame());
3400 EXPECT_TRUE(scheduler_->begin_frames_expected()); 3400 EXPECT_TRUE(scheduler_->begin_frames_expected());
3401 client_->Reset(); 3401 client_->Reset();
3402 3402
3403 task_runner().RunPendingTasks(); // Run posted deadline. 3403 task_runner().RunPendingTasks(); // Run posted deadline.
3404 EXPECT_ACTION("ScheduledActionDrawIfPossible", client_, 0, 1); 3404 EXPECT_ACTION("ScheduledActionDrawIfPossible", client_, 0, 1);
3405 EXPECT_FALSE(client_->IsInsideBeginImplFrame()); 3405 EXPECT_FALSE(client_->IsInsideBeginImplFrame());
3406 EXPECT_TRUE(scheduler_->begin_frames_expected()); 3406 EXPECT_TRUE(scheduler_->begin_frames_expected());
3407 client_->Reset(); 3407 client_->Reset();
3408 3408
3409 // Successful draw caused damage. 3409 // Successful draw caused damage.
3410 latest_confirmed_sequence_number = args.sequence_number; 3410 latest_confirmed_sequence_number = args.sequence_number;
3411 has_damage = true; 3411 has_damage = true;
3412 EXPECT_EQ( 3412 EXPECT_EQ(
3413 BeginFrameAck(args.source_id, args.sequence_number, 3413 BeginFrameAck(args.source_id, args.sequence_number,
3414 latest_confirmed_sequence_number, 0, has_damage), 3414 latest_confirmed_sequence_number, has_damage),
3415 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get())); 3415 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get()));
3416 3416
3417 // Request another redraw, but fail it. Verify that a new ack is sent, but 3417 // Request another redraw, but fail it. Verify that a new ack is sent, but
3418 // that its |latest_confirmed_sequence_number| didn't change. 3418 // that its |latest_confirmed_sequence_number| didn't change.
3419 scheduler_->SetNeedsRedraw(); 3419 scheduler_->SetNeedsRedraw();
3420 client_->Reset(); 3420 client_->Reset();
3421 3421
3422 args = SendNextBeginFrame(); 3422 args = SendNextBeginFrame();
3423 EXPECT_LT(latest_confirmed_sequence_number, args.sequence_number); 3423 EXPECT_LT(latest_confirmed_sequence_number, args.sequence_number);
3424 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 1); 3424 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 1);
3425 EXPECT_TRUE(client_->IsInsideBeginImplFrame()); 3425 EXPECT_TRUE(client_->IsInsideBeginImplFrame());
3426 EXPECT_TRUE(scheduler_->begin_frames_expected()); 3426 EXPECT_TRUE(scheduler_->begin_frames_expected());
3427 client_->Reset(); 3427 client_->Reset();
3428 3428
3429 client_->SetDrawWillHappen(false); 3429 client_->SetDrawWillHappen(false);
3430 task_runner().RunPendingTasks(); // Run posted deadline. 3430 task_runner().RunPendingTasks(); // Run posted deadline.
3431 EXPECT_ACTION("ScheduledActionDrawIfPossible", client_, 0, 2); 3431 EXPECT_ACTION("ScheduledActionDrawIfPossible", client_, 0, 2);
3432 // Failed draw triggers SendBeginMainFrame. 3432 // Failed draw triggers SendBeginMainFrame.
3433 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2); 3433 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2);
3434 EXPECT_FALSE(client_->IsInsideBeginImplFrame()); 3434 EXPECT_FALSE(client_->IsInsideBeginImplFrame());
3435 EXPECT_TRUE(scheduler_->begin_frames_expected()); 3435 EXPECT_TRUE(scheduler_->begin_frames_expected());
3436 client_->Reset(); 3436 client_->Reset();
3437 3437
3438 // Failed draw: no damage and unconfirmed frame. 3438 // Failed draw: no damage and unconfirmed frame.
3439 has_damage = false; 3439 has_damage = false;
3440 EXPECT_EQ( 3440 EXPECT_EQ(
3441 BeginFrameAck(args.source_id, args.sequence_number, 3441 BeginFrameAck(args.source_id, args.sequence_number,
3442 latest_confirmed_sequence_number, 0, has_damage), 3442 latest_confirmed_sequence_number, has_damage),
3443 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get())); 3443 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get()));
3444 } 3444 }
3445 3445
3446 TEST_F(SchedulerTest, BeginFrameAckForSkippedImplFrame) { 3446 TEST_F(SchedulerTest, BeginFrameAckForSkippedImplFrame) {
3447 SetUpScheduler(EXTERNAL_BFS); 3447 SetUpScheduler(EXTERNAL_BFS);
3448 3448
3449 // To get into a high latency state, this test disables automatic swap acks. 3449 // To get into a high latency state, this test disables automatic swap acks.
3450 client_->SetAutomaticSubmitCompositorFrameAck(false); 3450 client_->SetAutomaticSubmitCompositorFrameAck(false);
3451 fake_compositor_timing_history_->SetAllEstimatesTo(kFastDuration); 3451 fake_compositor_timing_history_->SetAllEstimatesTo(kFastDuration);
3452 3452
(...skipping 12 matching lines...) Expand all
3465 EXPECT_ACTION("ScheduledActionDrawIfPossible", client_, 0, 1); 3465 EXPECT_ACTION("ScheduledActionDrawIfPossible", client_, 0, 1);
3466 EXPECT_FALSE(client_->IsInsideBeginImplFrame()); 3466 EXPECT_FALSE(client_->IsInsideBeginImplFrame());
3467 EXPECT_TRUE(scheduler_->begin_frames_expected()); 3467 EXPECT_TRUE(scheduler_->begin_frames_expected());
3468 client_->Reset(); 3468 client_->Reset();
3469 3469
3470 // Successful draw caused damage. 3470 // Successful draw caused damage.
3471 uint64_t latest_confirmed_sequence_number = args.sequence_number; 3471 uint64_t latest_confirmed_sequence_number = args.sequence_number;
3472 bool has_damage = true; 3472 bool has_damage = true;
3473 EXPECT_EQ( 3473 EXPECT_EQ(
3474 BeginFrameAck(args.source_id, args.sequence_number, 3474 BeginFrameAck(args.source_id, args.sequence_number,
3475 latest_confirmed_sequence_number, 0, has_damage), 3475 latest_confirmed_sequence_number, has_damage),
3476 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get())); 3476 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get()));
3477 3477
3478 // Request another redraw that will be skipped because the swap ack is still 3478 // Request another redraw that will be skipped because the swap ack is still
3479 // missing. Verify that a new BeginFrameAck is sent. 3479 // missing. Verify that a new BeginFrameAck is sent.
3480 scheduler_->SetNeedsRedraw(); 3480 scheduler_->SetNeedsRedraw();
3481 client_->Reset(); 3481 client_->Reset();
3482 3482
3483 args = SendNextBeginFrame(); 3483 args = SendNextBeginFrame();
3484 EXPECT_LT(latest_confirmed_sequence_number, args.sequence_number); 3484 EXPECT_LT(latest_confirmed_sequence_number, args.sequence_number);
3485 EXPECT_NO_ACTION(client_); 3485 EXPECT_NO_ACTION(client_);
3486 EXPECT_FALSE(client_->IsInsideBeginImplFrame()); 3486 EXPECT_FALSE(client_->IsInsideBeginImplFrame());
3487 EXPECT_TRUE(scheduler_->begin_frames_expected()); 3487 EXPECT_TRUE(scheduler_->begin_frames_expected());
3488 client_->Reset(); 3488 client_->Reset();
3489 3489
3490 // Skipped draw: no damage and unconfirmed frame. 3490 // Skipped draw: no damage and unconfirmed frame.
3491 has_damage = false; 3491 has_damage = false;
3492 EXPECT_EQ( 3492 EXPECT_EQ(
3493 BeginFrameAck(args.source_id, args.sequence_number, 3493 BeginFrameAck(args.source_id, args.sequence_number,
3494 latest_confirmed_sequence_number, 0, has_damage), 3494 latest_confirmed_sequence_number, has_damage),
3495 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get())); 3495 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get()));
3496 } 3496 }
3497 3497
3498 TEST_F(SchedulerTest, BeginFrameAckForBeginFrameBeforeLastDeadline) { 3498 TEST_F(SchedulerTest, BeginFrameAckForBeginFrameBeforeLastDeadline) {
3499 SetUpScheduler(EXTERNAL_BFS); 3499 SetUpScheduler(EXTERNAL_BFS);
3500 3500
3501 // Request tile preparation to schedule a proactive BeginFrame. 3501 // Request tile preparation to schedule a proactive BeginFrame.
3502 scheduler_->SetNeedsPrepareTiles(); 3502 scheduler_->SetNeedsPrepareTiles();
3503 client_->Reset(); 3503 client_->Reset();
3504 3504
(...skipping 16 matching lines...) Expand all
3521 EXPECT_FALSE(scheduler_->begin_frames_expected()); 3521 EXPECT_FALSE(scheduler_->begin_frames_expected());
3522 client_->Reset(); 3522 client_->Reset();
3523 3523
3524 // Latest ack should be for the dropped BeginFrame. Since we don't have 3524 // Latest ack should be for the dropped BeginFrame. Since we don't have
3525 // further updates, its |latest_confirmed_sequence_number| should be for the 3525 // further updates, its |latest_confirmed_sequence_number| should be for the
3526 // dropped BeginFrame, too. 3526 // dropped BeginFrame, too.
3527 uint64_t latest_confirmed_sequence_number = args.sequence_number; 3527 uint64_t latest_confirmed_sequence_number = args.sequence_number;
3528 bool has_damage = false; 3528 bool has_damage = false;
3529 EXPECT_EQ( 3529 EXPECT_EQ(
3530 BeginFrameAck(args.source_id, args.sequence_number, 3530 BeginFrameAck(args.source_id, args.sequence_number,
3531 latest_confirmed_sequence_number, 0, has_damage), 3531 latest_confirmed_sequence_number, has_damage),
3532 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get())); 3532 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get()));
3533 } 3533 }
3534 3534
3535 TEST_F(SchedulerTest, BeginFrameAckForDroppedBeginFrame) { 3535 TEST_F(SchedulerTest, BeginFrameAckForDroppedBeginFrame) {
3536 SetUpScheduler(EXTERNAL_BFS); 3536 SetUpScheduler(EXTERNAL_BFS);
3537 3537
3538 // Last confirmed frame was last BeginFrame. 3538 // Last confirmed frame was last BeginFrame.
3539 uint64_t latest_confirmed_sequence_number = 3539 uint64_t latest_confirmed_sequence_number =
3540 fake_external_begin_frame_source_->next_begin_frame_number() - 1; 3540 fake_external_begin_frame_source_->next_begin_frame_number() - 1;
3541 3541
(...skipping 16 matching lines...) Expand all
3558 // The BeginFrame should be dropped immediately, since the state machine is 3558 // The BeginFrame should be dropped immediately, since the state machine is
3559 // not expecting any BeginFrames. 3559 // not expecting any BeginFrames.
3560 BeginFrameArgs second_args = SendNextBeginFrame(); 3560 BeginFrameArgs second_args = SendNextBeginFrame();
3561 EXPECT_NO_ACTION(client_); 3561 EXPECT_NO_ACTION(client_);
3562 client_->Reset(); 3562 client_->Reset();
3563 3563
3564 // Latest ack should be for the dropped (and unconfirmed) BeginFrame. 3564 // Latest ack should be for the dropped (and unconfirmed) BeginFrame.
3565 bool has_damage = false; 3565 bool has_damage = false;
3566 EXPECT_EQ( 3566 EXPECT_EQ(
3567 BeginFrameAck(second_args.source_id, second_args.sequence_number, 3567 BeginFrameAck(second_args.source_id, second_args.sequence_number,
3568 latest_confirmed_sequence_number, 0, has_damage), 3568 latest_confirmed_sequence_number, has_damage),
3569 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get())); 3569 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get()));
3570 3570
3571 task_runner().RunPendingTasks(); // Run deadline of prior BeginFrame. 3571 task_runner().RunPendingTasks(); // Run deadline of prior BeginFrame.
3572 EXPECT_ACTION("RemoveObserver(this)", client_, 0, 2); 3572 EXPECT_ACTION("RemoveObserver(this)", client_, 0, 2);
3573 EXPECT_ACTION("SendBeginMainFrameNotExpectedSoon", client_, 1, 2); 3573 EXPECT_ACTION("SendBeginMainFrameNotExpectedSoon", client_, 1, 2);
3574 client_->Reset(); 3574 client_->Reset();
3575 3575
3576 // We'd expect an out-of-order ack for the prior BeginFrame, confirming it. 3576 // We'd expect an out-of-order ack for the prior BeginFrame, confirming it.
3577 latest_confirmed_sequence_number = first_args.sequence_number; 3577 latest_confirmed_sequence_number = first_args.sequence_number;
3578 has_damage = false; 3578 has_damage = false;
3579 EXPECT_EQ( 3579 EXPECT_EQ(
3580 BeginFrameAck(first_args.source_id, first_args.sequence_number, 3580 BeginFrameAck(first_args.source_id, first_args.sequence_number,
3581 latest_confirmed_sequence_number, 0, has_damage), 3581 latest_confirmed_sequence_number, has_damage),
3582 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get())); 3582 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get()));
3583 } 3583 }
3584 3584
3585 TEST_F(SchedulerTest, BeginFrameAckForLateMissedBeginFrame) { 3585 TEST_F(SchedulerTest, BeginFrameAckForLateMissedBeginFrame) {
3586 SetUpScheduler(EXTERNAL_BFS); 3586 SetUpScheduler(EXTERNAL_BFS);
3587 3587
3588 // Last confirmed frame was last BeginFrame. 3588 // Last confirmed frame was last BeginFrame.
3589 uint64_t latest_confirmed_sequence_number = 3589 uint64_t latest_confirmed_sequence_number =
3590 fake_external_begin_frame_source_->next_begin_frame_number() - 1; 3590 fake_external_begin_frame_source_->next_begin_frame_number() - 1;
3591 3591
(...skipping 11 matching lines...) Expand all
3603 3603
3604 EXPECT_NO_ACTION(client_); 3604 EXPECT_NO_ACTION(client_);
3605 EXPECT_FALSE(client_->IsInsideBeginImplFrame()); 3605 EXPECT_FALSE(client_->IsInsideBeginImplFrame());
3606 client_->Reset(); 3606 client_->Reset();
3607 3607
3608 // Latest ack should be for the missed BeginFrame that was too late: no damage 3608 // Latest ack should be for the missed BeginFrame that was too late: no damage
3609 // and unconfirmed frame. 3609 // and unconfirmed frame.
3610 bool has_damage = false; 3610 bool has_damage = false;
3611 EXPECT_EQ( 3611 EXPECT_EQ(
3612 BeginFrameAck(args.source_id, args.sequence_number, 3612 BeginFrameAck(args.source_id, args.sequence_number,
3613 latest_confirmed_sequence_number, 0, has_damage), 3613 latest_confirmed_sequence_number, has_damage),
3614 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get())); 3614 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get()));
3615 } 3615 }
3616 3616
3617 TEST_F(SchedulerTest, BeginFrameAckForFinishedBeginFrameWithNewSourceId) { 3617 TEST_F(SchedulerTest, BeginFrameAckForFinishedBeginFrameWithNewSourceId) {
3618 SetUpScheduler(EXTERNAL_BFS); 3618 SetUpScheduler(EXTERNAL_BFS);
3619 3619
3620 scheduler_->SetNeedsRedraw(); 3620 scheduler_->SetNeedsRedraw();
3621 client_->Reset(); 3621 client_->Reset();
3622 3622
3623 // Send a BeginFrame with a different source_id. 3623 // Send a BeginFrame with a different source_id.
(...skipping 12 matching lines...) Expand all
3636 EXPECT_ACTION("ScheduledActionDrawIfPossible", client_, 0, 1); 3636 EXPECT_ACTION("ScheduledActionDrawIfPossible", client_, 0, 1);
3637 EXPECT_FALSE(client_->IsInsideBeginImplFrame()); 3637 EXPECT_FALSE(client_->IsInsideBeginImplFrame());
3638 EXPECT_TRUE(scheduler_->begin_frames_expected()); 3638 EXPECT_TRUE(scheduler_->begin_frames_expected());
3639 client_->Reset(); 3639 client_->Reset();
3640 3640
3641 // Successful draw caused damage. 3641 // Successful draw caused damage.
3642 uint64_t latest_confirmed_sequence_number = args.sequence_number; 3642 uint64_t latest_confirmed_sequence_number = args.sequence_number;
3643 bool has_damage = true; 3643 bool has_damage = true;
3644 EXPECT_EQ( 3644 EXPECT_EQ(
3645 BeginFrameAck(args.source_id, args.sequence_number, 3645 BeginFrameAck(args.source_id, args.sequence_number,
3646 latest_confirmed_sequence_number, 0, has_damage), 3646 latest_confirmed_sequence_number, has_damage),
3647 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get())); 3647 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get()));
3648 } 3648 }
3649 3649
3650 TEST_F(SchedulerTest, 3650 TEST_F(SchedulerTest,
3651 BeginFrameAckForLateMissedBeginFrameWithDifferentSourceId) { 3651 BeginFrameAckForLateMissedBeginFrameWithDifferentSourceId) {
3652 SetUpScheduler(EXTERNAL_BFS); 3652 SetUpScheduler(EXTERNAL_BFS);
3653 3653
3654 scheduler_->SetNeedsRedraw(); 3654 scheduler_->SetNeedsRedraw();
3655 client_->Reset(); 3655 client_->Reset();
3656 3656
(...skipping 12 matching lines...) Expand all
3669 client_->Reset(); 3669 client_->Reset();
3670 3670
3671 // Latest ack should be for the missed BeginFrame that was too late: no damage 3671 // Latest ack should be for the missed BeginFrame that was too late: no damage
3672 // and unconfirmed frame. Because the source_id changed, the 3672 // and unconfirmed frame. Because the source_id changed, the
3673 // |latest_confirmed_sequence_number| should be set to invalid. 3673 // |latest_confirmed_sequence_number| should be set to invalid.
3674 uint64_t latest_confirmed_sequence_number = 3674 uint64_t latest_confirmed_sequence_number =
3675 BeginFrameArgs::kInvalidFrameNumber; 3675 BeginFrameArgs::kInvalidFrameNumber;
3676 bool has_damage = false; 3676 bool has_damage = false;
3677 EXPECT_EQ( 3677 EXPECT_EQ(
3678 BeginFrameAck(args.source_id, args.sequence_number, 3678 BeginFrameAck(args.source_id, args.sequence_number,
3679 latest_confirmed_sequence_number, 0, has_damage), 3679 latest_confirmed_sequence_number, has_damage),
3680 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get())); 3680 fake_external_begin_frame_source_->LastAckForObserver(scheduler_.get()));
3681 } 3681 }
3682 3682
3683 } // namespace 3683 } // namespace
3684 } // namespace cc 3684 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler/scheduler.cc ('k') | cc/surfaces/compositor_frame_sink_support.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698