1 // Copyright 2015 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef COMPONENTS_VIZ_TEST_BEGIN_FRAME_SOURCE_TEST_H_ 6 #define COMPONENTS_VIZ_TEST_BEGIN_FRAME_SOURCE_TEST_H_ 7 8 #include "base/trace_event/traced_value.h" 9 #include "components/viz/common/frame_sinks/begin_frame_source.h" 10 #include "components/viz/test/begin_frame_args_test.h" 11 #include "testing/gmock/include/gmock/gmock.h" 12 #include "testing/gtest/include/gtest/gtest.h" 13 14 // Macros to help set up expected calls on the MockBeginFrameObserver. 15 #define EXPECT_BEGIN_FRAME_DROP(obs, source_id, sequence_number, frame_time, \ 16 deadline, interval) \ 17 EXPECT_CALL((obs), OnBeginFrame(CreateBeginFrameArgsForTesting( \ 18 BEGINFRAME_FROM_HERE, source_id, sequence_number, \ 19 frame_time, deadline, interval))) \ 20 .Times(1) \ 21 .InSequence((obs).sequence) 22 23 #define EXPECT_BEGIN_FRAME_USED(obs, source_id, sequence_number, frame_time, \ 24 deadline, interval) \ 25 EXPECT_CALL((obs), OnBeginFrame(CreateBeginFrameArgsForTesting( \ 26 BEGINFRAME_FROM_HERE, source_id, sequence_number, \ 27 frame_time, deadline, interval))) \ 28 .InSequence((obs).sequence) \ 29 .WillOnce(::testing::SaveArg<0>(&((obs).last_begin_frame_args))) 30 31 #define EXPECT_BEGIN_FRAME_USED_MISSED(obs, source_id, sequence_number, \ 32 frame_time, deadline, interval) \ 33 EXPECT_CALL( \ 34 (obs), OnBeginFrame(CreateBeginFrameArgsForTesting( \ 35 BEGINFRAME_FROM_HERE, source_id, sequence_number, frame_time, \ 36 deadline, interval, BeginFrameArgs::MISSED))) \ 37 .InSequence((obs).sequence) \ 38 .WillOnce(::testing::SaveArg<0>(&((obs).last_begin_frame_args))) 39 40 #define EXPECT_BEGIN_FRAME_ARGS_DROP(obs, args) \ 41 EXPECT_CALL((obs), OnBeginFrame(args)).Times(1).InSequence((obs).sequence) 42 43 #define EXPECT_BEGIN_FRAME_ARGS_USED(obs, args) \ 44 EXPECT_CALL((obs), OnBeginFrame(args)) \ 45 .InSequence((obs).sequence) \ 46 .WillOnce(::testing::SaveArg<0>(&((obs).last_begin_frame_args))) 47 48 #define EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, paused) \ 49 EXPECT_CALL((obs), OnBeginFrameSourcePausedChanged(paused)) \ 50 .Times(1) \ 51 .InSequence((obs).sequence) 52 53 // Macros to send BeginFrameArgs on a FakeBeginFrameSink (and verify 54 // resulting observer behaviour). 55 #define SEND_BEGIN_FRAME(args_equal_to, source, sequence_number, frame_time, \ 56 deadline, interval) \ 57 { \ 58 BeginFrameArgs old_args = (source).TestLastUsedBeginFrameArgs(); \ 59 BeginFrameArgs new_args = CreateBeginFrameArgsForTesting( \ 60 BEGINFRAME_FROM_HERE, (source).source_id(), sequence_number, \ 61 frame_time, deadline, interval); \ 62 ASSERT_FALSE(old_args == new_args); \ 63 (source).TestOnBeginFrame(new_args); \ 64 EXPECT_EQ(args_equal_to, (source).TestLastUsedBeginFrameArgs()); \ 65 } 66 67 // When dropping LastUsedBeginFrameArgs **shouldn't** change. 68 #define SEND_BEGIN_FRAME_DROP(source, sequence_number, frame_time, deadline, \ 69 interval) \ 70 SEND_BEGIN_FRAME(old_args, source, sequence_number, frame_time, deadline, \ 71 interval); 72 73 // When used LastUsedBeginFrameArgs **should** be updated. 74 #define SEND_BEGIN_FRAME_USED(source, sequence_number, frame_time, deadline, \ 75 interval) \ 76 SEND_BEGIN_FRAME(new_args, source, sequence_number, frame_time, deadline, \ 77 interval); 78 79 namespace viz { 80 81 class MockBeginFrameObserver : public BeginFrameObserver { 82 public: 83 MOCK_METHOD1(OnBeginFrame, void(const BeginFrameArgs&)); 84 MOCK_CONST_METHOD0(LastUsedBeginFrameArgs, const BeginFrameArgs&()); 85 MOCK_METHOD1(OnBeginFrameSourcePausedChanged, void(bool)); 86 MOCK_CONST_METHOD0(WantsAnimateOnlyBeginFrames, bool()); 87 MOCK_CONST_METHOD0(IsRoot, bool()); 88 89 virtual void AsValueInto(base::trace_event::TracedValue* dict) const; 90 91 // A value different from the normal default returned by a 92 // BeginFrameObserver so it is easiable traced back here. 93 static const BeginFrameArgs kDefaultBeginFrameArgs; 94 95 MockBeginFrameObserver(); 96 ~MockBeginFrameObserver() override; 97 98 BeginFrameArgs last_begin_frame_args; 99 ::testing::Sequence sequence; 100 }; 101 102 } // namespace viz 103 104 #endif // COMPONENTS_VIZ_TEST_BEGIN_FRAME_SOURCE_TEST_H_ 105