Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(58)

Side by Side Diff: third_party/WebKit/Source/modules/webaudio/AudioScheduledSourceNode.cpp

Issue 2159403002: Replace ASSERT with DCHECK in WebAudio (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012, Google Inc. All rights reserved. 2 * Copyright (C) 2012, 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 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 29 matching lines...) Expand all
40 : AudioHandler(nodeType, node, sampleRate) 40 : AudioHandler(nodeType, node, sampleRate)
41 , m_startTime(0) 41 , m_startTime(0)
42 , m_endTime(UnknownTime) 42 , m_endTime(UnknownTime)
43 , m_playbackState(UNSCHEDULED_STATE) 43 , m_playbackState(UNSCHEDULED_STATE)
44 { 44 {
45 } 45 }
46 46
47 void AudioScheduledSourceHandler::updateSchedulingInfo( 47 void AudioScheduledSourceHandler::updateSchedulingInfo(
48 size_t quantumFrameSize, AudioBus* outputBus, size_t& quantumFrameOffset, si ze_t& nonSilentFramesToProcess) 48 size_t quantumFrameSize, AudioBus* outputBus, size_t& quantumFrameOffset, si ze_t& nonSilentFramesToProcess)
49 { 49 {
50 ASSERT(outputBus); 50 DCHECK(outputBus);
51 if (!outputBus) 51 if (!outputBus)
52 return; 52 return;
53 53
54 ASSERT(quantumFrameSize == ProcessingSizeInFrames); 54 DCHECK_EQ(quantumFrameSize, static_cast<size_t>(ProcessingSizeInFrames));
55 if (quantumFrameSize != ProcessingSizeInFrames) 55 if (quantumFrameSize != ProcessingSizeInFrames)
56 return; 56 return;
57 57
58 double sampleRate = this->sampleRate(); 58 double sampleRate = this->sampleRate();
59 59
60 // quantumStartFrame : Start frame of the current time quantum. 60 // quantumStartFrame : Start frame of the current time quantum.
61 // quantumEndFrame : End frame of the current time quantum. 61 // quantumEndFrame : End frame of the current time quantum.
62 // startFrame : Start frame for this source. 62 // startFrame : Start frame for this source.
63 // endFrame : End frame for this source. 63 // endFrame : End frame for this source.
64 size_t quantumStartFrame = context()->currentSampleFrame(); 64 size_t quantumStartFrame = context()->currentSampleFrame();
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 } 103 }
104 104
105 // Handle silence after we're done playing. 105 // Handle silence after we're done playing.
106 // If the end time is somewhere in the middle of this time quantum, then zer o out the 106 // If the end time is somewhere in the middle of this time quantum, then zer o out the
107 // frames from the end time to the very end of the quantum. 107 // frames from the end time to the very end of the quantum.
108 if (m_endTime != UnknownTime && endFrame >= quantumStartFrame && endFrame < quantumEndFrame) { 108 if (m_endTime != UnknownTime && endFrame >= quantumStartFrame && endFrame < quantumEndFrame) {
109 size_t zeroStartFrame = endFrame - quantumStartFrame; 109 size_t zeroStartFrame = endFrame - quantumStartFrame;
110 size_t framesToZero = quantumFrameSize - zeroStartFrame; 110 size_t framesToZero = quantumFrameSize - zeroStartFrame;
111 111
112 bool isSafe = zeroStartFrame < quantumFrameSize && framesToZero <= quant umFrameSize && zeroStartFrame + framesToZero <= quantumFrameSize; 112 bool isSafe = zeroStartFrame < quantumFrameSize && framesToZero <= quant umFrameSize && zeroStartFrame + framesToZero <= quantumFrameSize;
113 ASSERT(isSafe); 113 DCHECK(isSafe);
114 114
115 if (isSafe) { 115 if (isSafe) {
116 if (framesToZero > nonSilentFramesToProcess) 116 if (framesToZero > nonSilentFramesToProcess)
117 nonSilentFramesToProcess = 0; 117 nonSilentFramesToProcess = 0;
118 else 118 else
119 nonSilentFramesToProcess -= framesToZero; 119 nonSilentFramesToProcess -= framesToZero;
120 120
121 for (unsigned i = 0; i < outputBus->numberOfChannels(); ++i) 121 for (unsigned i = 0; i < outputBus->numberOfChannels(); ++i)
122 memset(outputBus->channel(i)->mutableData() + zeroStartFrame, 0, sizeof(float) * framesToZero); 122 memset(outputBus->channel(i)->mutableData() + zeroStartFrame, 0, sizeof(float) * framesToZero);
123 } 123 }
124 124
125 finish(); 125 finish();
126 } 126 }
127 127
128 return; 128 return;
129 } 129 }
130 130
131 void AudioScheduledSourceHandler::start(double when, ExceptionState& exceptionSt ate) 131 void AudioScheduledSourceHandler::start(double when, ExceptionState& exceptionSt ate)
132 { 132 {
133 ASSERT(isMainThread()); 133 DCHECK(isMainThread());
134 134
135 context()->recordUserGestureState(); 135 context()->recordUserGestureState();
136 136
137 if (playbackState() != UNSCHEDULED_STATE) { 137 if (playbackState() != UNSCHEDULED_STATE) {
138 exceptionState.throwDOMException( 138 exceptionState.throwDOMException(
139 InvalidStateError, 139 InvalidStateError,
140 "cannot call start more than once."); 140 "cannot call start more than once.");
141 return; 141 return;
142 } 142 }
143 143
(...skipping 18 matching lines...) Expand all
162 162
163 // If |when| < currentTime, the source must start now according to the spec. 163 // If |when| < currentTime, the source must start now according to the spec.
164 // So just set startTime to currentTime in this case to start the source now . 164 // So just set startTime to currentTime in this case to start the source now .
165 m_startTime = std::max(when, context()->currentTime()); 165 m_startTime = std::max(when, context()->currentTime());
166 166
167 setPlaybackState(SCHEDULED_STATE); 167 setPlaybackState(SCHEDULED_STATE);
168 } 168 }
169 169
170 void AudioScheduledSourceHandler::stop(double when, ExceptionState& exceptionSta te) 170 void AudioScheduledSourceHandler::stop(double when, ExceptionState& exceptionSta te)
171 { 171 {
172 ASSERT(isMainThread()); 172 DCHECK(isMainThread());
173 173
174 if (playbackState() == UNSCHEDULED_STATE) { 174 if (playbackState() == UNSCHEDULED_STATE) {
175 exceptionState.throwDOMException( 175 exceptionState.throwDOMException(
176 InvalidStateError, 176 InvalidStateError,
177 "cannot call stop without calling start first."); 177 "cannot call stop without calling start first.");
178 return; 178 return;
179 } 179 }
180 180
181 if (when < 0) { 181 if (when < 0) {
182 exceptionState.throwDOMException( 182 exceptionState.throwDOMException(
(...skipping 28 matching lines...) Expand all
211 { 211 {
212 finishWithoutOnEnded(); 212 finishWithoutOnEnded();
213 213
214 if (context()->getExecutionContext()) { 214 if (context()->getExecutionContext()) {
215 context()->getExecutionContext()->postTask(BLINK_FROM_HERE, createCrossT hreadTask(&AudioScheduledSourceHandler::notifyEnded, PassRefPtr<AudioScheduledSo urceHandler>(this))); 215 context()->getExecutionContext()->postTask(BLINK_FROM_HERE, createCrossT hreadTask(&AudioScheduledSourceHandler::notifyEnded, PassRefPtr<AudioScheduledSo urceHandler>(this)));
216 } 216 }
217 } 217 }
218 218
219 void AudioScheduledSourceHandler::notifyEnded() 219 void AudioScheduledSourceHandler::notifyEnded()
220 { 220 {
221 ASSERT(isMainThread()); 221 DCHECK(isMainThread());
222 if (node()) 222 if (node())
223 node()->dispatchEvent(Event::create(EventTypeNames::ended)); 223 node()->dispatchEvent(Event::create(EventTypeNames::ended));
224 } 224 }
225 225
226 // ---------------------------------------------------------------- 226 // ----------------------------------------------------------------
227 227
228 AudioScheduledSourceNode::AudioScheduledSourceNode(BaseAudioContext& context) 228 AudioScheduledSourceNode::AudioScheduledSourceNode(BaseAudioContext& context)
229 : AudioSourceNode(context) 229 : AudioSourceNode(context)
230 , ActiveScriptWrappable(this) 230 , ActiveScriptWrappable(this)
231 { 231 {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 // playback state if the context is closed. 272 // playback state if the context is closed.
273 if (context()->isContextClosed()) 273 if (context()->isContextClosed())
274 return false; 274 return false;
275 275
276 // If a node is scheduled or playing, do not collect the node prematurely 276 // If a node is scheduled or playing, do not collect the node prematurely
277 // even its reference is out of scope. Then fire onended event if assigned. 277 // even its reference is out of scope. Then fire onended event if assigned.
278 return audioScheduledSourceHandler().isPlayingOrScheduled(); 278 return audioScheduledSourceHandler().isPlayingOrScheduled();
279 } 279 }
280 280
281 } // namespace blink 281 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698