| Index: content/browser/renderer_host/compositing_iosurface_mac.h
|
| diff --git a/content/browser/renderer_host/compositing_iosurface_mac.h b/content/browser/renderer_host/compositing_iosurface_mac.h
|
| index 59d6f26c048d179ccdcebb7a3319b9b08adfec1b..d9f415cc0b43ec534a4cb00e302d4fe6713b2f45 100644
|
| --- a/content/browser/renderer_host/compositing_iosurface_mac.h
|
| +++ b/content/browser/renderer_host/compositing_iosurface_mac.h
|
| @@ -6,10 +6,14 @@
|
| #define CONTENT_BROWSER_RENDERER_HOST_ACCELERATED_COMPOSITING_VIEW_MAC_H
|
|
|
| #import <Cocoa/Cocoa.h>
|
| +#import <QuartzCore/CVDisplayLink.h>
|
| #include <QuartzCore/QuartzCore.h>
|
|
|
| #include "base/mac/scoped_cftyperef.h"
|
| #include "base/memory/scoped_nsobject.h"
|
| +#include "base/synchronization/lock.h"
|
| +#include "base/time.h"
|
| +#include "base/timer.h"
|
| #include "ui/gfx/native_widget_types.h"
|
| #include "ui/gfx/size.h"
|
|
|
| @@ -61,7 +65,19 @@ class CompositingIOSurfaceMac {
|
|
|
| bool is_vsync_disabled() const { return is_vsync_disabled_; }
|
|
|
| + // Get vsync scheduling parameters.
|
| + void GetVSyncParameters(base::TimeTicks* timebase,
|
| + uint32* interval_numerator,
|
| + uint32* interval_denominator);
|
| +
|
| private:
|
| + friend CVReturn DisplayLinkCallback(CVDisplayLinkRef,
|
| + const CVTimeStamp*,
|
| + const CVTimeStamp*,
|
| + CVOptionFlags,
|
| + CVOptionFlags*,
|
| + void*);
|
| +
|
| // Vertex structure for use in glDraw calls.
|
| struct SurfaceVertex {
|
| SurfaceVertex() : x_(0.0f), y_(0.0f), tx_(0.0f), ty_(0.0f) { }
|
| @@ -111,7 +127,8 @@ class CompositingIOSurfaceMac {
|
| GLuint shader_program_blit_rgb,
|
| GLint blit_rgb_sampler_location,
|
| GLuint shader_program_white,
|
| - bool is_vsync_disabled);
|
| + bool is_vsync_disabled,
|
| + CVDisplayLinkRef display_link);
|
|
|
| // Returns true if IOSurface is ready to render. False otherwise.
|
| bool MapIOSurfaceToTexture(uint64 io_surface_handle);
|
| @@ -120,6 +137,19 @@ class CompositingIOSurfaceMac {
|
|
|
| void DrawQuad(const SurfaceQuad& quad);
|
|
|
| + // Called on display-link thread.
|
| + void DisplayLinkTick(CVDisplayLinkRef display_link,
|
| + const CVTimeStamp* output_time);
|
| +
|
| + void CalculateVsyncParametersLockHeld(const CVTimeStamp* time);
|
| +
|
| + // Prevent from spinning on CGLFlushDrawable when it fails to throttle to
|
| + // VSync frequency.
|
| + void RateLimitDraws();
|
| +
|
| + void StartOrContinueDisplayLink();
|
| + void StopDisplayLink();
|
| +
|
| // Cached pointer to IOSurfaceSupport Singleton.
|
| IOSurfaceSupport* io_surface_support_;
|
|
|
| @@ -150,6 +180,24 @@ class CompositingIOSurfaceMac {
|
| SurfaceQuad quad_;
|
|
|
| bool is_vsync_disabled_;
|
| +
|
| + // CVDisplayLink for querying Vsync timing info and throttling swaps.
|
| + CVDisplayLinkRef display_link_;
|
| +
|
| + // Timer for stopping display link after a timeout with no swaps.
|
| + base::DelayTimer<CompositingIOSurfaceMac> display_link_stop_timer_;
|
| +
|
| + // Lock for sharing data between UI thread and display-link thread.
|
| + base::Lock lock_;
|
| +
|
| + // Counts for throttling swaps.
|
| + int64 vsync_count_;
|
| + int64 swap_count_;
|
| +
|
| + // Vsync timing data.
|
| + base::TimeTicks vsync_timebase_;
|
| + uint32 vsync_interval_numerator_;
|
| + uint32 vsync_interval_denominator_;
|
| };
|
|
|
| } // namespace content
|
|
|