Commit 6809a47c authored by jbates@chromium.org's avatar jbates@chromium.org

Hook up Mac OSX VSync parameters to compositor thread

Also fixes precision error on Windows.

BUG=137794

Review URL: https://chromiumcodereview.appspot.com/10830347

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@151932 0039d316-1c4b-4281-b951-d872f2087c98
parent c44ae61d
...@@ -74,6 +74,8 @@ class CompositingIOSurfaceMac { ...@@ -74,6 +74,8 @@ class CompositingIOSurfaceMac {
bool is_vsync_disabled() const { return is_vsync_disabled_; } bool is_vsync_disabled() const { return is_vsync_disabled_; }
// Get vsync scheduling parameters. // Get vsync scheduling parameters.
// |interval_numerator/interval_denominator| equates to fractional number of
// seconds between vsyncs.
void GetVSyncParameters(base::TimeTicks* timebase, void GetVSyncParameters(base::TimeTicks* timebase,
uint32* interval_numerator, uint32* interval_numerator,
uint32* interval_denominator); uint32* interval_denominator);
...@@ -158,7 +160,7 @@ class CompositingIOSurfaceMac { ...@@ -158,7 +160,7 @@ class CompositingIOSurfaceMac {
// Called on display-link thread. // Called on display-link thread.
void DisplayLinkTick(CVDisplayLinkRef display_link, void DisplayLinkTick(CVDisplayLinkRef display_link,
const CVTimeStamp* output_time); const CVTimeStamp* time);
void CalculateVsyncParametersLockHeld(const CVTimeStamp* time); void CalculateVsyncParametersLockHeld(const CVTimeStamp* time);
......
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
#include "base/command_line.h" #include "base/command_line.h"
#include "base/debug/trace_event.h" #include "base/debug/trace_event.h"
#include "base/threading/platform_thread.h" #include "base/threading/platform_thread.h"
#include "content/browser/renderer_host/render_widget_host_view_mac.h"
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
#include "gpu/command_buffer/service/gpu_switches.h" #include "gpu/command_buffer/service/gpu_switches.h"
#include "ui/gfx/rect.h" #include "ui/gfx/rect.h"
...@@ -261,6 +260,7 @@ CompositingIOSurfaceMac::CompositingIOSurfaceMac( ...@@ -261,6 +260,7 @@ CompositingIOSurfaceMac::CompositingIOSurfaceMac(
void CompositingIOSurfaceMac::GetVSyncParameters(base::TimeTicks* timebase, void CompositingIOSurfaceMac::GetVSyncParameters(base::TimeTicks* timebase,
uint32* interval_numerator, uint32* interval_numerator,
uint32* interval_denominator) { uint32* interval_denominator) {
base::AutoLock lock(lock_);
*timebase = vsync_timebase_; *timebase = vsync_timebase_;
*interval_numerator = vsync_interval_numerator_; *interval_numerator = vsync_interval_numerator_;
*interval_denominator = vsync_interval_denominator_; *interval_denominator = vsync_interval_denominator_;
...@@ -552,16 +552,18 @@ void CompositingIOSurfaceMac::ClearDrawable() { ...@@ -552,16 +552,18 @@ void CompositingIOSurfaceMac::ClearDrawable() {
} }
void CompositingIOSurfaceMac::DisplayLinkTick(CVDisplayLinkRef display_link, void CompositingIOSurfaceMac::DisplayLinkTick(CVDisplayLinkRef display_link,
const CVTimeStamp* output_time) { const CVTimeStamp* time) {
TRACE_EVENT0("gpu", "CompositingIOSurfaceMac::DisplayLinkTick");
base::AutoLock lock(lock_); base::AutoLock lock(lock_);
// Increment vsync_count but don't let it get ahead of swap_count. // Increment vsync_count but don't let it get ahead of swap_count.
vsync_count_ = std::min(vsync_count_ + 1, swap_count_); vsync_count_ = std::min(vsync_count_ + 1, swap_count_);
CalculateVsyncParametersLockHeld(output_time); CalculateVsyncParametersLockHeld(time);
} }
void CompositingIOSurfaceMac::CalculateVsyncParametersLockHeld( void CompositingIOSurfaceMac::CalculateVsyncParametersLockHeld(
const CVTimeStamp* time) { const CVTimeStamp* time) {
lock_.AssertAcquired();
vsync_interval_numerator_ = static_cast<uint32>(time->videoRefreshPeriod); vsync_interval_numerator_ = static_cast<uint32>(time->videoRefreshPeriod);
vsync_interval_denominator_ = time->videoTimeScale; vsync_interval_denominator_ = time->videoTimeScale;
// Verify that videoRefreshPeriod is 32 bits. // Verify that videoRefreshPeriod is 32 bits.
......
...@@ -1029,8 +1029,24 @@ void RenderWidgetHostViewMac::AckPendingSwapBuffers() { ...@@ -1029,8 +1029,24 @@ void RenderWidgetHostViewMac::AckPendingSwapBuffers() {
pending_swap_buffers_acks_.front().first, pending_swap_buffers_acks_.front().first,
pending_swap_buffers_acks_.front().second, pending_swap_buffers_acks_.front().second,
0); 0);
if (render_widget_host_) if (render_widget_host_) {
render_widget_host_->AcknowledgeSwapBuffersToRenderer(); render_widget_host_->AcknowledgeSwapBuffersToRenderer();
// Send VSync parameters to compositor thread.
if (compositing_iosurface_.get()) {
base::TimeTicks timebase;
uint32 numerator = 0, denominator = 0;
compositing_iosurface_->GetVSyncParameters(&timebase,
&numerator,
&denominator);
if (numerator > 0 && denominator > 0) {
int64 interval_micros =
1000000 * static_cast<int64>(numerator) / denominator;
render_widget_host_->UpdateVSyncParameters(
timebase, base::TimeDelta::FromMicroseconds(interval_micros));
}
}
}
} }
pending_swap_buffers_acks_.erase(pending_swap_buffers_acks_.begin()); pending_swap_buffers_acks_.erase(pending_swap_buffers_acks_.begin());
} }
......
...@@ -857,7 +857,7 @@ void AcceleratedPresenter::DoPresentAndAcknowledge( ...@@ -857,7 +857,7 @@ void AcceleratedPresenter::DoPresentAndAcknowledge(
if (GetPresentationStats(&timebase, &numerator, &denominator) && if (GetPresentationStats(&timebase, &numerator, &denominator) &&
numerator > 0 && denominator > 0) { numerator > 0 && denominator > 0) {
int64 interval_micros = int64 interval_micros =
static_cast<int64>(1000000 * numerator) / denominator; 1000000 * static_cast<int64>(numerator) / denominator;
interval = base::TimeDelta::FromMicroseconds(interval_micros); interval = base::TimeDelta::FromMicroseconds(interval_micros);
} }
scoped_completion_runner.Release(); scoped_completion_runner.Release();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment