Index: webrtc/modules/audio_processing/audio_processing_impl.cc |
diff --git a/webrtc/modules/audio_processing/audio_processing_impl.cc b/webrtc/modules/audio_processing/audio_processing_impl.cc |
index a33294534307e1e593c1c605029eeb885d58f853..b79b4f0c7695d18e952ed7f06c7a324fc17ae90f 100644 |
--- a/webrtc/modules/audio_processing/audio_processing_impl.cc |
+++ b/webrtc/modules/audio_processing/audio_processing_impl.cc |
@@ -632,6 +632,7 @@ int AudioProcessingImpl::ProcessStream(const float* const* src, |
for (int i = 0; i < formats_.api_format.output_stream().num_channels(); ++i) |
msg->add_output_channel(dest[i], channel_size); |
RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), |
+ &debug_dump_.num_bytes_left_for_log_, |
&crit_debug_, &debug_dump_.capture)); |
} |
#endif |
@@ -719,6 +720,7 @@ int AudioProcessingImpl::ProcessStream(AudioFrame* frame) { |
sizeof(int16_t) * frame->samples_per_channel_ * frame->num_channels_; |
msg->set_output_data(frame->data_, data_size); |
RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), |
+ &debug_dump_.num_bytes_left_for_log_, |
&crit_debug_, &debug_dump_.capture)); |
} |
#endif |
@@ -886,6 +888,7 @@ int AudioProcessingImpl::AnalyzeReverseStreamLocked( |
i < formats_.api_format.reverse_input_stream().num_channels(); ++i) |
msg->add_channel(src[i], channel_size); |
RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), |
+ &debug_dump_.num_bytes_left_for_log_, |
&crit_debug_, &debug_dump_.render)); |
} |
#endif |
@@ -954,6 +957,7 @@ int AudioProcessingImpl::AnalyzeReverseStream(AudioFrame* frame) { |
sizeof(int16_t) * frame->samples_per_channel_ * frame->num_channels_; |
msg->set_data(frame->data_, data_size); |
RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), |
+ &debug_dump_.num_bytes_left_for_log_, |
&crit_debug_, &debug_dump_.render)); |
} |
#endif |
@@ -1039,7 +1043,8 @@ int AudioProcessingImpl::delay_offset_ms() const { |
} |
int AudioProcessingImpl::StartDebugRecording( |
- const char filename[AudioProcessing::kMaxFilenameSize]) { |
+ const char filename[AudioProcessing::kMaxFilenameSize], |
+ int64_t max_log_size_bytes) { |
// Run in a single-threaded manner. |
rtc::CritScope cs_render(&crit_render_); |
rtc::CritScope cs_capture(&crit_capture_); |
@@ -1050,6 +1055,7 @@ int AudioProcessingImpl::StartDebugRecording( |
} |
#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
+ debug_dump_.num_bytes_left_for_log_ = max_log_size_bytes; |
// Stop any ongoing recording. |
if (debug_dump_.debug_file->Open()) { |
if (debug_dump_.debug_file->CloseFile() == -1) { |
@@ -1070,7 +1076,8 @@ int AudioProcessingImpl::StartDebugRecording( |
#endif // WEBRTC_AUDIOPROC_DEBUG_DUMP |
} |
-int AudioProcessingImpl::StartDebugRecording(FILE* handle) { |
+int AudioProcessingImpl::StartDebugRecording(FILE* handle, |
+ int64_t max_log_size_bytes) { |
// Run in a single-threaded manner. |
rtc::CritScope cs_render(&crit_render_); |
rtc::CritScope cs_capture(&crit_capture_); |
@@ -1080,6 +1087,8 @@ int AudioProcessingImpl::StartDebugRecording(FILE* handle) { |
} |
#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
+ debug_dump_.num_bytes_left_for_log_ = max_log_size_bytes; |
+ |
// Stop any ongoing recording. |
if (debug_dump_.debug_file->Open()) { |
if (debug_dump_.debug_file->CloseFile() == -1) { |
@@ -1105,7 +1114,7 @@ int AudioProcessingImpl::StartDebugRecordingForPlatformFile( |
rtc::CritScope cs_render(&crit_render_); |
rtc::CritScope cs_capture(&crit_capture_); |
FILE* stream = rtc::FdopenPlatformFileForWriting(handle); |
- return StartDebugRecording(stream); |
+ return StartDebugRecording(stream, -1); |
} |
int AudioProcessingImpl::StopDebugRecording() { |
@@ -1400,6 +1409,7 @@ void AudioProcessingImpl::UpdateHistogramsOnCallEnd() { |
#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
int AudioProcessingImpl::WriteMessageToDebugFile( |
FileWrapper* debug_file, |
+ int64_t* filesize_limit_bytes, |
rtc::CriticalSection* crit_debug, |
ApmDebugDumpThreadState* debug_state) { |
int32_t size = debug_state->event_msg->ByteSize(); |
@@ -1417,7 +1427,19 @@ int AudioProcessingImpl::WriteMessageToDebugFile( |
{ |
// Ensure atomic writes of the message. |
- rtc::CritScope cs_capture(crit_debug); |
+ rtc::CritScope cs_debug(crit_debug); |
+ |
+ RTC_DCHECK(debug_file->Open()); |
+ // Update the byte counter. |
+ if (*filesize_limit_bytes >= 0) { |
+ *filesize_limit_bytes -= |
+ (sizeof(int32_t) + debug_state->event_str.length()); |
+ if (*filesize_limit_bytes < 0) { |
+ // Not enough bytes are left to write this message, so stop logging. |
+ debug_file->CloseFile(); |
+ return kNoError; |
+ } |
+ } |
// Write message preceded by its size. |
if (!debug_file->Write(&size, sizeof(int32_t))) { |
return kFileError; |
@@ -1452,6 +1474,7 @@ int AudioProcessingImpl::WriteInitMessage() { |
// debug_dump_.capture.event_msg. |
RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), |
+ &debug_dump_.num_bytes_left_for_log_, |
&crit_debug_, &debug_dump_.capture)); |
return kNoError; |
} |
@@ -1504,6 +1527,7 @@ int AudioProcessingImpl::WriteConfigMessage(bool forced) { |
debug_dump_.capture.event_msg->mutable_config()->CopyFrom(config); |
RETURN_ON_ERR(WriteMessageToDebugFile(debug_dump_.debug_file.get(), |
+ &debug_dump_.num_bytes_left_for_log_, |
&crit_debug_, &debug_dump_.capture)); |
return kNoError; |
} |