Index: content/browser/renderer_host/display_link_mac.cc |
diff --git a/content/browser/renderer_host/display_link_mac.cc b/content/browser/renderer_host/display_link_mac.cc |
index b7239c0899bbb47d6a2e04516585a91dcf4a5a02..8d26a6d1e9d3b1a48f54c7a358a5bb3866c5839d 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( |