summaryrefslogtreecommitdiffstats
path: root/content/browser/renderer_host/display_link_mac.cc
diff options
context:
space:
mode:
Diffstat (limited to 'content/browser/renderer_host/display_link_mac.cc')
-rw-r--r--content/browser/renderer_host/display_link_mac.cc45
1 files changed, 29 insertions, 16 deletions
diff --git a/content/browser/renderer_host/display_link_mac.cc b/content/browser/renderer_host/display_link_mac.cc
index b7239c0..8d26a6d 100644
--- a/content/browser/renderer_host/display_link_mac.cc
+++ b/content/browser/renderer_host/display_link_mac.cc
@@ -7,23 +7,36 @@
#include "base/debug/trace_event.h"
#include "base/logging.h"
+namespace base {
+
+template<>
+struct ScopedTypeRefTraits<CVDisplayLinkRef> {
+ static void Retain(CVDisplayLinkRef object) {
+ CVDisplayLinkRetain(object);
+ }
+ static void Release(CVDisplayLinkRef object) {
+ CVDisplayLinkRelease(object);
+ }
+};
+
+} // namespace base
+
namespace content {
// static
scoped_refptr<DisplayLinkMac> DisplayLinkMac::Create() {
CVReturn ret = kCVReturnSuccess;
- scoped_refptr<DisplayLinkMac> display_link_mac;
- {
- CVDisplayLinkRef display_link = NULL;
- ret = CVDisplayLinkCreateWithActiveCGDisplays(&display_link);
- if (ret != kCVReturnSuccess) {
- LOG(ERROR) << "CVDisplayLinkCreateWithActiveCGDisplays failed: " << ret;
- return NULL;
- }
- display_link_mac = new DisplayLinkMac(display_link);
+ base::ScopedTypeRef<CVDisplayLinkRef> display_link;
+ ret = CVDisplayLinkCreateWithActiveCGDisplays(display_link.InitializeInto());
+ if (ret != kCVReturnSuccess) {
+ LOG(ERROR) << "CVDisplayLinkCreateWithActiveCGDisplays failed: " << ret;
+ return NULL;
}
+ scoped_refptr<DisplayLinkMac> display_link_mac;
+ display_link_mac = new DisplayLinkMac(display_link);
+
ret = CVDisplayLinkSetOutputCallback(
display_link_mac->display_link_,
&DisplayLinkCallback,
@@ -36,18 +49,18 @@ scoped_refptr<DisplayLinkMac> DisplayLinkMac::Create() {
return display_link_mac;
}
-DisplayLinkMac::DisplayLinkMac(CVDisplayLinkRef display_link)
- : display_link_(display_link),
- stop_timer_(
- FROM_HERE, base::TimeDelta::FromSeconds(1),
- this, &DisplayLinkMac::StopDisplayLink),
- timebase_and_interval_valid_(false) {
+DisplayLinkMac::DisplayLinkMac(
+ base::ScopedTypeRef<CVDisplayLinkRef> display_link)
+ : display_link_(display_link),
+ stop_timer_(
+ FROM_HERE, base::TimeDelta::FromSeconds(1),
+ this, &DisplayLinkMac::StopDisplayLink),
+ timebase_and_interval_valid_(false) {
}
DisplayLinkMac::~DisplayLinkMac() {
if (CVDisplayLinkIsRunning(display_link_))
CVDisplayLinkStop(display_link_);
- CVDisplayLinkRelease(display_link_);
}
bool DisplayLinkMac::GetVSyncParameters(