OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 } | 74 } |
75 | 75 |
76 void MIDIAccess::setOnstatechange(PassRefPtrWillBeRawPtr<EventListener> listener
) | 76 void MIDIAccess::setOnstatechange(PassRefPtrWillBeRawPtr<EventListener> listener
) |
77 { | 77 { |
78 m_hasPendingActivity = listener; | 78 m_hasPendingActivity = listener; |
79 setAttributeEventListener(EventTypeNames::statechange, listener); | 79 setAttributeEventListener(EventTypeNames::statechange, listener); |
80 } | 80 } |
81 | 81 |
82 bool MIDIAccess::hasPendingActivity() const | 82 bool MIDIAccess::hasPendingActivity() const |
83 { | 83 { |
84 return m_hasPendingActivity && !executionContext()->activeDOMObjectsAreStopp
ed(); | 84 return m_hasPendingActivity && !getExecutionContext()->activeDOMObjectsAreSt
opped(); |
85 } | 85 } |
86 | 86 |
87 MIDIInputMap* MIDIAccess::inputs() const | 87 MIDIInputMap* MIDIAccess::inputs() const |
88 { | 88 { |
89 HeapVector<Member<MIDIInput>> inputs; | 89 HeapVector<Member<MIDIInput>> inputs; |
90 HashSet<String> ids; | 90 HashSet<String> ids; |
91 for (size_t i = 0; i < m_inputs.size(); ++i) { | 91 for (size_t i = 0; i < m_inputs.size(); ++i) { |
92 MIDIInput* input = m_inputs[i]; | 92 MIDIInput* input = m_inputs[i]; |
93 if (input->getState() != PortState::MIDIPortStateDisconnected) { | 93 if (input->getState() != PortState::MIDIPortStateDisconnected) { |
94 inputs.append(input); | 94 inputs.append(input); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
157 | 157 |
158 void MIDIAccess::didReceiveMIDIData(unsigned portIndex, const unsigned char* dat
a, size_t length, double timeStamp) | 158 void MIDIAccess::didReceiveMIDIData(unsigned portIndex, const unsigned char* dat
a, size_t length, double timeStamp) |
159 { | 159 { |
160 ASSERT(isMainThread()); | 160 ASSERT(isMainThread()); |
161 if (portIndex >= m_inputs.size()) | 161 if (portIndex >= m_inputs.size()) |
162 return; | 162 return; |
163 | 163 |
164 // Convert from time in seconds which is based on the time coordinate system
of monotonicallyIncreasingTime() | 164 // Convert from time in seconds which is based on the time coordinate system
of monotonicallyIncreasingTime() |
165 // into time in milliseconds (a DOMHighResTimeStamp) according to the same t
ime coordinate system as performance.now(). | 165 // into time in milliseconds (a DOMHighResTimeStamp) according to the same t
ime coordinate system as performance.now(). |
166 // This is how timestamps are defined in the Web MIDI spec. | 166 // This is how timestamps are defined in the Web MIDI spec. |
167 Document* document = toDocument(executionContext()); | 167 Document* document = toDocument(getExecutionContext()); |
168 ASSERT(document); | 168 ASSERT(document); |
169 | 169 |
170 double timeStampInMilliseconds = 1000 * document->loader()->timing().monoton
icTimeToZeroBasedDocumentTime(timeStamp); | 170 double timeStampInMilliseconds = 1000 * document->loader()->timing().monoton
icTimeToZeroBasedDocumentTime(timeStamp); |
171 | 171 |
172 m_inputs[portIndex]->didReceiveMIDIData(portIndex, data, length, timeStampIn
Milliseconds); | 172 m_inputs[portIndex]->didReceiveMIDIData(portIndex, data, length, timeStampIn
Milliseconds); |
173 } | 173 } |
174 | 174 |
175 void MIDIAccess::sendMIDIData(unsigned portIndex, const unsigned char* data, siz
e_t length, double timeStampInMilliseconds) | 175 void MIDIAccess::sendMIDIData(unsigned portIndex, const unsigned char* data, siz
e_t length, double timeStampInMilliseconds) |
176 { | 176 { |
177 if (!data || !length || portIndex >= m_outputs.size()) | 177 if (!data || !length || portIndex >= m_outputs.size()) |
178 return; | 178 return; |
179 // Convert from a time in milliseconds (a DOMHighResTimeStamp) according to
the same time coordinate system as performance.now() | 179 // Convert from a time in milliseconds (a DOMHighResTimeStamp) according to
the same time coordinate system as performance.now() |
180 // into a time in seconds which is based on the time coordinate system of mo
notonicallyIncreasingTime(). | 180 // into a time in seconds which is based on the time coordinate system of mo
notonicallyIncreasingTime(). |
181 double timeStamp; | 181 double timeStamp; |
182 | 182 |
183 if (!timeStampInMilliseconds) { | 183 if (!timeStampInMilliseconds) { |
184 // We treat a value of 0 (which is the default value) as special, meanin
g "now". | 184 // We treat a value of 0 (which is the default value) as special, meanin
g "now". |
185 // We need to translate it exactly to 0 seconds. | 185 // We need to translate it exactly to 0 seconds. |
186 timeStamp = 0; | 186 timeStamp = 0; |
187 } else { | 187 } else { |
188 Document* document = toDocument(executionContext()); | 188 Document* document = toDocument(getExecutionContext()); |
189 ASSERT(document); | 189 ASSERT(document); |
190 double documentStartTime = document->loader()->timing().referenceMonoton
icTime(); | 190 double documentStartTime = document->loader()->timing().referenceMonoton
icTime(); |
191 timeStamp = documentStartTime + 0.001 * timeStampInMilliseconds; | 191 timeStamp = documentStartTime + 0.001 * timeStampInMilliseconds; |
192 } | 192 } |
193 | 193 |
194 m_accessor->sendMIDIData(portIndex, data, length, timeStamp); | 194 m_accessor->sendMIDIData(portIndex, data, length, timeStamp); |
195 } | 195 } |
196 | 196 |
197 void MIDIAccess::stop() | 197 void MIDIAccess::stop() |
198 { | 198 { |
199 m_accessor.clear(); | 199 m_accessor.clear(); |
200 } | 200 } |
201 | 201 |
202 DEFINE_TRACE(MIDIAccess) | 202 DEFINE_TRACE(MIDIAccess) |
203 { | 203 { |
204 visitor->trace(m_inputs); | 204 visitor->trace(m_inputs); |
205 visitor->trace(m_outputs); | 205 visitor->trace(m_outputs); |
206 RefCountedGarbageCollectedEventTargetWithInlineData<MIDIAccess>::trace(visit
or); | 206 RefCountedGarbageCollectedEventTargetWithInlineData<MIDIAccess>::trace(visit
or); |
207 ActiveDOMObject::trace(visitor); | 207 ActiveDOMObject::trace(visitor); |
208 } | 208 } |
209 | 209 |
210 } // namespace blink | 210 } // namespace blink |
OLD | NEW |