Bug 1160102 - use VsyncDisplay interface to turn on/off vsync. r=kats

This commit is contained in:
JerryShih 2015-05-04 03:33:00 +02:00
parent 44097a2158
commit e07f83f600
2 changed files with 28 additions and 1 deletions

View File

@ -79,6 +79,7 @@ public:
protected:
~nsScreenManagerGonk();
void VsyncControl(bool aEnabled);
bool mInitialized;
nsCOMPtr<nsIScreen> mOneScreen;

View File

@ -56,6 +56,7 @@
#include "mozilla/TouchEvents.h"
#include "nsThreadUtils.h"
#include "HwcComposer2D.h"
#include "VsyncSource.h"
#define LOG(args...) __android_log_print(ANDROID_LOG_INFO, "Gonk" , ## args)
#define LOGW(args...) __android_log_print(ANDROID_LOG_WARN, "Gonk", ## args)
@ -1116,7 +1117,10 @@ nsScreenManagerGonk::Initialize()
void
nsScreenManagerGonk::DisplayEnabled(bool aEnabled)
{
HwcComposer2D::GetInstance()->EnableVsync(aEnabled);
if (gfxPrefs::HardwareVsyncEnabled()) {
VsyncControl(aEnabled);
}
NS_DispatchToMainThread(aEnabled ? mScreenOnEvent : mScreenOffEvent);
}
@ -1163,3 +1167,25 @@ nsScreenManagerGonk::GetSystemDefaultScale(float *aDefaultScale)
*aDefaultScale = 1.0f;
return NS_OK;
}
void
nsScreenManagerGonk::VsyncControl(bool aEnabled)
{
MOZ_ASSERT(gfxPrefs::HardwareVsyncEnabled());
if (!NS_IsMainThread()) {
NS_DispatchToMainThread(
NS_NewRunnableMethodWithArgs<bool>(this,
&nsScreenManagerGonk::VsyncControl,
aEnabled));
return;
}
MOZ_ASSERT(NS_IsMainThread());
VsyncSource::Display &display = gfxPlatform::GetPlatform()->GetHardwareVsync()->GetGlobalDisplay();
if (aEnabled) {
display.EnableVsync();
} else {
display.DisableVsync();
}
}