1 // Copyright 2014 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_FAKE_EXTERNAL_BEGIN_FRAME_SOURCE_H_ 6 #define COMPONENTS_VIZ_TEST_FAKE_EXTERNAL_BEGIN_FRAME_SOURCE_H_ 7 8 #include <set> 9 10 #include "base/cancelable_callback.h" 11 #include "base/memory/weak_ptr.h" 12 #include "base/sequence_checker.h" 13 #include "components/viz/common/frame_sinks/begin_frame_args.h" 14 #include "components/viz/common/frame_sinks/begin_frame_source.h" 15 16 namespace base { 17 class TickClock; 18 } // namespace base 19 20 namespace viz { 21 22 class FakeExternalBeginFrameSource : public BeginFrameSource { 23 public: 24 class Client { 25 public: 26 virtual void OnAddObserver(BeginFrameObserver* obs) = 0; 27 virtual void OnRemoveObserver(BeginFrameObserver* obs) = 0; 28 }; 29 30 explicit FakeExternalBeginFrameSource(double refresh_rate, 31 bool tick_automatically); 32 ~FakeExternalBeginFrameSource() override; 33 SetClient(Client * client)34 void SetClient(Client* client) { client_ = client; } 35 void SetPaused(bool paused); 36 37 // BeginFrameSource implementation. 38 void AddObserver(BeginFrameObserver* obs) override; 39 void RemoveObserver(BeginFrameObserver* obs) override; 40 void DidFinishFrame(BeginFrameObserver* obs) override; 41 bool IsThrottled() const override; OnGpuNoLongerBusy()42 void OnGpuNoLongerBusy() override {} 43 44 BeginFrameArgs CreateBeginFrameArgs( 45 BeginFrameArgs::CreationLocation location); 46 BeginFrameArgs CreateBeginFrameArgs(BeginFrameArgs::CreationLocation location, 47 const base::TickClock* now_src); next_begin_frame_number()48 uint64_t next_begin_frame_number() const { return next_begin_frame_number_; } 49 50 void TestOnBeginFrame(const BeginFrameArgs& args); 51 num_observers()52 size_t num_observers() const { return observers_.size(); } 53 54 using BeginFrameSource::RequestCallbackOnGpuAvailable; 55 56 private: 57 void PostTestOnBeginFrame(); 58 59 const bool tick_automatically_; 60 const double milliseconds_per_frame_; 61 Client* client_ = nullptr; 62 bool paused_ = false; 63 BeginFrameArgs current_args_; 64 uint64_t next_begin_frame_number_ = BeginFrameArgs::kStartingFrameNumber; 65 std::set<BeginFrameObserver*> observers_; 66 base::CancelableOnceClosure begin_frame_task_; 67 68 SEQUENCE_CHECKER(sequence_checker_); 69 70 base::WeakPtrFactory<FakeExternalBeginFrameSource> weak_ptr_factory_{this}; 71 }; 72 73 } // namespace viz 74 75 #endif // COMPONENTS_VIZ_TEST_FAKE_EXTERNAL_BEGIN_FRAME_SOURCE_H_ 76