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 f3ee0a399d54eaefad5020a550816051c421d0eb..d1c474a15168765a59c4bb4bb2e23750c6660914 100644 |
--- a/webrtc/modules/audio_processing/audio_processing_impl.cc |
+++ b/webrtc/modules/audio_processing/audio_processing_impl.cc |
@@ -194,6 +194,7 @@ AudioProcessingImpl::AudioProcessingImpl(const Config& config, |
#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
debug_file_(FileWrapper::Create()), |
event_msg_(new audioproc::Event()), |
+ nr_bytes_left_for_log(-1), |
#endif |
api_format_({{{kSampleRate16kHz, 1, false}, |
{kSampleRate16kHz, 1, false}, |
@@ -901,7 +902,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) { |
CriticalSectionScoped crit_scoped(crit_); |
static_assert(kMaxFilenameSize == FileWrapper::kMaxFileNameSize, ""); |
@@ -910,13 +912,8 @@ int AudioProcessingImpl::StartDebugRecording( |
} |
#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
+ nr_bytes_left_for_log = max_log_size_bytes; |
// Stop any ongoing recording. |
- if (debug_file_->Open()) { |
- if (debug_file_->CloseFile() == -1) { |
- return kFileError; |
- } |
- } |
- |
if (debug_file_->OpenFile(filename, false) == -1) { |
debug_file_->CloseFile(); |
return kFileError; |
@@ -930,7 +927,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) { |
CriticalSectionScoped crit_scoped(crit_); |
if (handle == NULL) { |
@@ -938,6 +936,8 @@ int AudioProcessingImpl::StartDebugRecording(FILE* handle) { |
} |
#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
+ nr_bytes_left_for_log = max_log_size_bytes; |
+ |
// Stop any ongoing recording. |
if (debug_file_->Open()) { |
if (debug_file_->CloseFile() == -1) { |
@@ -960,7 +960,7 @@ int AudioProcessingImpl::StartDebugRecording(FILE* handle) { |
int AudioProcessingImpl::StartDebugRecordingForPlatformFile( |
rtc::PlatformFile handle) { |
FILE* stream = rtc::FdopenPlatformFileForWriting(handle); |
- return StartDebugRecording(stream); |
+ return StartDebugRecording(stream, -1); |
} |
int AudioProcessingImpl::StopDebugRecording() { |
@@ -1181,6 +1181,7 @@ void AudioProcessingImpl::UpdateHistogramsOnCallEnd() { |
#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
int AudioProcessingImpl::WriteMessageToDebugFile() { |
+ RTC_DCHECK(debug_file_->Open()); |
int32_t size = event_msg_->ByteSize(); |
if (size <= 0) { |
return kUnspecifiedError; |
@@ -1194,6 +1195,15 @@ int AudioProcessingImpl::WriteMessageToDebugFile() { |
return kUnspecifiedError; |
} |
+ if (nr_bytes_left_for_log >= 0) { |
+ nr_bytes_left_for_log -= (sizeof(int32_t) + event_str_.length()); |
+ if (nr_bytes_left_for_log < 0) { |
+ // Not enough bytes are left to write this message, so stop logging. |
+ debug_file_->CloseFile(); |
+ return kUnspecifiedError; |
+ } |
+ } |
+ |
// Write message preceded by its size. |
if (!debug_file_->Write(&size, sizeof(int32_t))) { |
return kFileError; |