| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/renderer_host/display_link_mac.h" | 5 #include "content/browser/renderer_host/display_link_mac.h" |
| 6 | 6 |
| 7 #include "base/debug/trace_event.h" | 7 #include "base/debug/trace_event.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 | 9 |
| 10 namespace base { | 10 namespace base { |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 | 87 |
| 88 base::AutoLock lock(lock_); | 88 base::AutoLock lock(lock_); |
| 89 if (!timebase_and_interval_valid_) | 89 if (!timebase_and_interval_valid_) |
| 90 return false; | 90 return false; |
| 91 | 91 |
| 92 *timebase = timebase_; | 92 *timebase = timebase_; |
| 93 *interval = interval_; | 93 *interval = interval_; |
| 94 return true; | 94 return true; |
| 95 } | 95 } |
| 96 | 96 |
| 97 void DisplayLinkMac::AddObserver(Observer* observer) { |
| 98 StartOrContinueDisplayLink(); |
| 99 observer_list_.AddObserver(observer); |
| 100 } |
| 101 |
| 102 void DisplayLinkMac::RemoveObserver(Observer* observer) { |
| 103 observer_list.RemoveObserver(observer); |
| 104 } |
| 105 |
| 97 void DisplayLinkMac::Tick(const CVTimeStamp* cv_time) { | 106 void DisplayLinkMac::Tick(const CVTimeStamp* cv_time) { |
| 98 TRACE_EVENT0("browser", "DisplayLinkMac::GetVSyncParameters"); | 107 TRACE_EVENT0("browser", "DisplayLinkMac::GetVSyncParameters"); |
| 99 base::AutoLock lock(lock_); | 108 base::AutoLock lock(lock_); |
| 100 | 109 |
| 101 // Verify that videoRefreshPeriod is 32 bits. | 110 // Verify that videoRefreshPeriod is 32 bits. |
| 102 DCHECK((cv_time->videoRefreshPeriod & ~0xffffFFFFull) == 0ull); | 111 DCHECK((cv_time->videoRefreshPeriod & ~0xffffFFFFull) == 0ull); |
| 103 | 112 |
| 104 // Verify that the numerator and denominator make some sense. | 113 // Verify that the numerator and denominator make some sense. |
| 105 uint32 numerator = static_cast<uint32>(cv_time->videoRefreshPeriod); | 114 uint32 numerator = static_cast<uint32>(cv_time->videoRefreshPeriod); |
| 106 uint32 denominator = cv_time->videoTimeScale; | 115 uint32 denominator = cv_time->videoTimeScale; |
| 107 if (numerator <= 0 || denominator <= 0) { | 116 if (numerator <= 0 || denominator <= 0) { |
| 108 LOG(WARNING) << "Unexpected numerator or denominator, bailing."; | 117 LOG(WARNING) << "Unexpected numerator or denominator, bailing."; |
| 109 return; | 118 return; |
| 110 } | 119 } |
| 111 | 120 |
| 112 timebase_ = base::TimeTicks::FromInternalValue( | 121 timebase_ = base::TimeTicks::FromInternalValue( |
| 113 cv_time->hostTime / 1000); | 122 cv_time->hostTime / 1000); |
| 114 interval_ = base::TimeDelta::FromMicroseconds( | 123 interval_ = base::TimeDelta::FromMicroseconds( |
| 115 1000000 * static_cast<int64>(numerator) / denominator); | 124 1000000 * static_cast<int64>(numerator) / denominator); |
| 116 timebase_and_interval_valid_ = true; | 125 timebase_and_interval_valid_ = true; |
| 126 |
| 127 FOR_EACH_OBSERVER(Observer, |
| 128 observer_list_, |
| 129 OnVSync(timebase_, interval_)); |
| 117 } | 130 } |
| 118 | 131 |
| 119 void DisplayLinkMac::StartOrContinueDisplayLink() { | 132 void DisplayLinkMac::StartOrContinueDisplayLink() { |
| 120 // Reset the timer, so that the display link won't be turned off for another | 133 // Reset the timer, so that the display link won't be turned off for another |
| 121 // second. | 134 // second. |
| 122 stop_timer_.Reset(); | 135 stop_timer_.Reset(); |
| 123 | 136 |
| 124 if (CVDisplayLinkIsRunning(display_link_)) | 137 if (CVDisplayLinkIsRunning(display_link_)) |
| 125 return; | 138 return; |
| 126 | 139 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 151 display_link_mac->Tick(output_time); | 164 display_link_mac->Tick(output_time); |
| 152 return kCVReturnSuccess; | 165 return kCVReturnSuccess; |
| 153 } | 166 } |
| 154 | 167 |
| 155 // static | 168 // static |
| 156 base::LazyInstance<DisplayLinkMac::DisplayMap> | 169 base::LazyInstance<DisplayLinkMac::DisplayMap> |
| 157 DisplayLinkMac::display_map_ = LAZY_INSTANCE_INITIALIZER; | 170 DisplayLinkMac::display_map_ = LAZY_INSTANCE_INITIALIZER; |
| 158 | 171 |
| 159 } // content | 172 } // content |
| 160 | 173 |
| OLD | NEW |