/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*- * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */#ifndef GFX_SOFTWARE_VSYNC_SOURCE_H#define GFX_SOFTWARE_VSYNC_SOURCE_H#include"mozilla/Monitor.h"#include"mozilla/RefPtr.h"#include"mozilla/TimeStamp.h"#include"base/thread.h"#include"nsISupportsImpl.h"#include"VsyncSource.h"classCancelableTask;classSoftwareDisplayfinal:publicmozilla::gfx::VsyncSource::Display{NS_INLINE_DECL_THREADSAFE_REFCOUNTING(SoftwareDisplay)public:SoftwareDisplay();virtualvoidEnableVsync()override;virtualvoidDisableVsync()override;virtualboolIsVsyncEnabled()override;boolIsInSoftwareVsyncThread();virtualvoidNotifyVsync(mozilla::TimeStampaVsyncTimestamp)override;virtualmozilla::TimeDurationGetVsyncRate()override;voidScheduleNextVsync(mozilla::TimeStampaVsyncTimestamp);voidShutdown()override;protected:~SoftwareDisplay();private:mozilla::TimeDurationmVsyncRate;// Use a chromium thread because nsITimers* fire on the main threadbase::Thread*mVsyncThread;CancelableTask*mCurrentVsyncTask;// only access on vsync threadboolmVsyncEnabled;// Only access on main thread};// SoftwareDisplay// Fallback option to use a software timer to mimic vsync. Useful for gtests// To mimic a hardware vsync thread, we create a dedicated software timer// vsync thread.classSoftwareVsyncSource:publicmozilla::gfx::VsyncSource{public:SoftwareVsyncSource();~SoftwareVsyncSource();virtualDisplay&GetGlobalDisplay()override{MOZ_ASSERT(mGlobalDisplay!=nullptr);return*mGlobalDisplay;}private:RefPtr<SoftwareDisplay>mGlobalDisplay;};#endif /* GFX_SOFTWARE_VSYNC_SOURCE_H */