void AudioNodeStream::CheckForInactive() { if (((mActiveInputCount > 0 || mEngine->IsActive()) && !mMarkAsFinishedAfterThisBlock) || !mIsActive) { return; } mIsActive = false; mInputChunks.Clear(); // not required for foreseeable future for (auto& chunk : mLastChunks) { chunk.SetNull(WEBAUDIO_BLOCK_SIZE); } if (!(mFlags & EXTERNAL_OUTPUT)) { GraphImpl()->IncrementSuspendCount(this); } if (IsAudioParamStream()) { return; } for (const auto& consumer : mConsumers) { AudioNodeStream* ns = consumer->GetDestination()->AsAudioNodeStream(); if (ns) { ns->DecrementActiveInputCount(); } } }
void AudioNodeStream::SetActive() { if (mIsActive || mMarkAsFinishedAfterThisBlock) { return; } mIsActive = true; if (IsAudioParamStream()) { // Consumers merely influence stream order. // They do not read from the stream. return; } for (const auto& consumer : mConsumers) { AudioNodeStream* ns = consumer->GetDestination()->AsAudioNodeStream(); if (ns) { ns->IncrementActiveInputCount(); } } }