OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |