From 41b6533e5f3dd7f0320ef58608ee32e8e4f132fb Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Tue, 14 Jan 2025 23:41:57 -0500 Subject: [PATCH] use std::move with vector insertions Coverity has started detecting places where variables are inserted into a vector via a copy operation, and then not used anymore. Switch them over to explicit std::move for quick performance improvements. For example: 6405 MinidumpCrashpadInfo::AnnotationObject object = {annotation.type, name, 6406 value_data}; >>> CID 465406: Performance inefficiencies (COPY_INSTEAD_OF_MOVE) >>> "object" is copied and then passed-by-reference as parameter to STL insertion function "std::vector >::push_back( std::vector >::value_type const &)", when it could be moved instead. 6407 annotations_list->push_back(object); Change-Id: I2d3b3a35296dad84853f4dc6690d64c81c92d582 Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/6173183 Reviewed-by: Primiano Tucci Reviewed-by: Lei Zhang --- src/common/dwarf/dwarf2reader.cc | 2 +- src/processor/minidump.cc | 17 ++++++++++------- src/processor/minidump_processor.cc | 2 +- src/processor/proc_maps_linux.cc | 4 +++- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/common/dwarf/dwarf2reader.cc b/src/common/dwarf/dwarf2reader.cc index 7efb7d8b5..1c920fdc5 100644 --- a/src/common/dwarf/dwarf2reader.cc +++ b/src/common/dwarf/dwarf2reader.cc @@ -179,7 +179,7 @@ void CompilationUnit::ReadAbbrevs() { value); abbrev.attributes.push_back(abbrev_attr); } - abbrevs_->push_back(abbrev); + abbrevs_->push_back(std::move(abbrev)); } // Account of cases where entries are out of order. diff --git a/src/processor/minidump.cc b/src/processor/minidump.cc index d33522631..2a19836b3 100644 --- a/src/processor/minidump.cc +++ b/src/processor/minidump.cc @@ -5468,9 +5468,12 @@ bool MinidumpCrashpadInfo::Read(uint32_t expected_size) { module_crashpad_info_links_.push_back( module_crashpad_info_links[index].minidump_module_list_index); module_crashpad_info_.push_back(module_crashpad_info); - module_crashpad_info_list_annotations_.push_back(list_annotations); - module_crashpad_info_simple_annotations_.push_back(simple_annotations); - module_crashpad_info_annotation_objects_.push_back(annotation_objects); + module_crashpad_info_list_annotations_.push_back(std::move( + list_annotations)); + module_crashpad_info_simple_annotations_.push_back(std::move( + simple_annotations)); + module_crashpad_info_annotation_objects_.push_back(std::move( + annotation_objects)); } } @@ -6272,7 +6275,7 @@ bool Minidump::ReadStringList( return false; } - string_list->push_back(entry); + string_list->push_back(std::move(entry)); } return true; @@ -6402,9 +6405,9 @@ bool Minidump::ReadCrashpadAnnotationsList( return false; } - MinidumpCrashpadInfo::AnnotationObject object = {annotation.type, name, - value_data}; - annotations_list->push_back(object); + MinidumpCrashpadInfo::AnnotationObject object{annotation.type, name, + value_data}; + annotations_list->push_back(std::move(object)); } return true; diff --git a/src/processor/minidump_processor.cc b/src/processor/minidump_processor.cc index b2166e652..f4084005e 100644 --- a/src/processor/minidump_processor.cc +++ b/src/processor/minidump_processor.cc @@ -370,7 +370,7 @@ ProcessResult MinidumpProcessor::Process( stack->set_tid(thread_id); process_state->threads_.push_back(stack.release()); process_state->thread_memory_regions_.push_back(thread_memory); - process_state->thread_names_.push_back(thread_name); + process_state->thread_names_.push_back(std::move(thread_name)); } if (interrupted) { diff --git a/src/processor/proc_maps_linux.cc b/src/processor/proc_maps_linux.cc index 5234633e6..2ab6da225 100644 --- a/src/processor/proc_maps_linux.cc +++ b/src/processor/proc_maps_linux.cc @@ -17,6 +17,8 @@ #include #include +#include + #include "common/using_std_string.h" #include "processor/logging.h" @@ -99,7 +101,7 @@ bool ParseProcMaps(const string& input, return false; // Pushing then assigning saves us a string copy. - regions.push_back(region); + regions.push_back(std::move(region)); regions.back().path.assign(line + path_index); regions.back().line.assign(line); }